include_alias pragma

Указывает, что при обнаружении #include alias_filename в директиве компилятор заменяет actual_filename на своем месте.

Синтаксис

#pragma include_alias("alias_filename" , "actual_filename")
#pragma include_alias(<<>,alias_filename actual_filename>)

Замечания

Директива include_aliaspragma позволяет заменить файлы с различными именами или путями для имен файлов, включенных в исходные файлы. Например, некоторые файловые системы разрешают более длинные имена файлов заголовков, чем ограничение файловой системы 8.3 FAT. Компилятор не может просто усечь более длинные имена до 8.3, так как первые восемь символов более длинных имен файлов заголовков могут не быть уникальными. Всякий раз, когда компилятор видит строку alias_filename в #include директиве, он заменяет имя actual_filename . Затем он загружает файл заголовка actual_filename . Это pragma должно появиться перед соответствующими #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_aliaspragma простое сопоставление строк в именах файлов. Проверка другого имени файла не выполняется. Рассмотрим директивы в следующем примере:

#pragma include_alias("mymath.h", "math.h")
#include "./mymath.h"
#include "sys/mymath.h"

Не выполняется подстановка псевдонима, так как строки заголовка не совпадают точно. Кроме того, имена файлов заголовков, используемые в качестве аргументов для /Yu/Yc параметров компилятора или hdrstoppragmaне заменяются. Например, представим, что исходный файл содержит следующую директиву:

#include <AppleSystemHeaderStop.h>

В этом случае должен использоваться следующий параметр компилятора:

/YcAppleSystemHeaderStop.h

Можно использовать include_aliaspragma для сопоставления любого имени файла заголовка с другим. Например:

#pragma include_alias( "api.h", "c:\version1.0\api.h" )
#pragma include_alias( <stdio.h>, <newstdio.h> )
#include "api.h"
#include <stdio.h>

Не смешивайте имена файлов, заключенные в двойные кавычки с именами файлов, заключенными в угловые скобки. Например, учитывая приведенные выше две #pragma include_alias директивы, компилятор не выполняет подстановку на следующие #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

Кроме того, обратите внимание, что транзитивность не поддерживается. Рассмотрим следующий пример:

#pragma include_alias( "one.h", "two.h" )
#pragma include_alias( "two.h", "three.h" )
#include "one.h"

компилятор ищет файл two.h , а не three.h.

См. также

Директивы Pragma и __pragma_Pragma ключевое слово