include_alias
Указывает, что short_filename в качестве псевдонима для long_filename.
#pragma include_alias( "long_filename", "short_filename" )
#pragma include_alias( <long_filename>, <short_filename> )
Заметки
Некоторые файловые системы допускают более длинные имена файлов заголовков, чем ограничение файловой системе FAT 8,3.Компилятор не может просто усекать более длинные имена 8,3, поскольку первые 8 символов более длинных имен файла заголовка, могут не быть уникальными.Когда компилятор встречает long_filename строка, он подставляет short_filenameи ищет файл заголовка short_filename вместо этого.Эта прагма должна указываться раньше соответствовать #include директивы.Примеры.
// First eight characters of these two files not unique.
#pragma include_alias( "AppleSystemHeaderQuickdraw.h", "quickdra.h" )
#pragma include_alias( "AppleSystemHeaderFruit.h", "fruit.h" )
#pragma include_alias( "GraphicsMenu.h", "gramenu.h" )
#include "AppleSystemHeaderQuickdraw.h"
#include "AppleSystemHeaderFruit.h"
#include "GraphicsMenu.h"
Псевдоним, в котором выполняется поиск, должен соответствовать спецификации в случае, если точно так же, как и в правописании при использовании двойных кавычек или угловых скобок. include_alias директива pragma выполняет простую строку соответствующим в именах файлов; никакая другая проверка имени файла не выполняется.Например, учитывая следующие рекомендации
#pragma include_alias("mymath.h", "math.h")
#include "./mymath.h"
#include "sys/mymath.h"
нет элиайсинг (подстановка) не выполняется, поскольку строка файла заголовка не совпадают.Кроме того, имена файлов заголовков, используемые в качестве аргументов для параметров компилятора /Yu и /Yc, или hdrstop директива pragma, не заменена.Например, если исходный файл содержит следующую директиву,
#include <AppleSystemHeaderStop.h>
соответствующий параметр компилятора должен иметь
/YcAppleSystemHeaderStop.h
Можно использовать include_alias директива pragma для сопоставления любое имя файла заголовка в другой.Примеры.
#pragma include_alias( "api.h", "c:\version1.0\api.h" )
#pragma include_alias( <stdio.h>, <newstdio.h> )
#include "api.h"
#include <stdio.h>
Не следует смешивать имена файлов, заключенные в двойные кавычки, имена файлов, заключенные в угловые скобки.Например, если приведенные выше 2 include_alias #pragma директивы, компилятор не выполняет подстановку в следующем нет #include рекомендации:
#include <api.h>
#include "stdio.h"
Более того, следующая директива формирует ошибку:
#pragma include_alias(<header.h>, "header.h") // Error
Обратите внимание, что имя файла сообщил об в сообщениях об ошибках или как стандартное значение __FILE__ макрос имени файла после подстановки было выполнено.Например, после следующих директив
#pragma include_alias( "VeryLongFileName.H", "myfile.h" )
#include "VeryLongFileName.H"
ошибка в VERYLONGFILENAME.H выдает сообщение об ошибке:
myfile.h(15) : error C2059 : syntax error
Также обратите внимание, что transitivity не поддерживается.Учитывая следующие рекомендации
#pragma include_alias( "one.h", "two.h" )
#pragma include_alias( "two.h", "three.h" )
#include "one.h"
компилятор выполняет поиск файла TWO.H, а не THREE.H.