include_alias pragma

Określa, że po znalezieniu #include alias_filename w dyrektywie kompilator zastępuje actual_filename w jego miejscu.

Składnia

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

Uwagi

Dyrektywa include_aliaspragma umożliwia zastępowanie plików, które mają różne nazwy lub ścieżki dla nazw plików uwzględnionych w plikach źródłowych. Na przykład niektóre systemy plików zezwalają na dłuższe nazwy plików nagłówka niż limit systemu plików FAT 8.3. Kompilator nie może po prostu obcinać dłuższych nazw do 8.3, ponieważ pierwsze osiem znaków dłuższych nazw nagłówków może nie być unikatowe. Za każdym razem, gdy kompilator widzi ciąg alias_filename w #include dyrektywie, zamiast tego zastępuje nazwę actual_filename . Następnie ładuje plik nagłówka actual_filename . Musi się to pragma pojawić przed odpowiednimi #include dyrektywami. Przykład:

// 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"

Alias do wyszukania musi dokładnie odpowiadać specyfikacji. Wielkość liter, pisownia i użycie podwójnych cudzysłowów lub nawiasów kątowych musi być zgodne. Funkcja include_aliaspragma wykonuje proste dopasowywanie ciągów w nazwach plików. Nie jest wykonywana żadna inna walidacja nazwy pliku. Na przykład, biorąc pod uwagę następujące dyrektywy,

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

nie jest wykonywana podstawianie aliasów, ponieważ ciągi pliku nagłówka nie są dokładnie zgodne. Ponadto nazwy plików nagłówków używane jako argumenty do /Yu opcji kompilatora i /Yc lub hdrstoppragma, nie są zastępowane. Na przykład, jeśli plik z kodem źródłowym zawiera następujące dyrektywy,

#include <AppleSystemHeaderStop.h>

odpowiadające opcje kompilatora to

/YcAppleSystemHeaderStop.h

Możesz użyć elementu , include_aliaspragma aby zamapować dowolną nazwę pliku nagłówka na inną. Przykład:

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

Nie mieszaj nazw plików ujętych w podwójny cudzysłów z nazwami plików ujętymi w nawiasy kątowe. Na przykład, biorąc pod uwagę powyższe dwie #pragma include_alias dyrektywy, kompilator nie podstępuje następujących #include dyrektyw:

#include <api.h>
#include "stdio.h"

Ponadto, następująca dyrektywa generuje błąd:

#pragma include_alias(<header.h>, "header.h")  // Error

Nazwa pliku zgłoszona w komunikatach o błędach lub jako wartość wstępnie zdefiniowanego __FILE__ makra jest nazwą pliku po zakończeniu podstawienia. Na przykład zobacz dane wyjściowe po następujących dyrektywach:

#pragma include_alias( "VERYLONGFILENAME.H", "myfile.h" )
#include "VERYLONGFILENAME.H"

Błąd w VERYLONGFILENAME.H pliku powoduje wygenerowanie następującego komunikatu o błędzie:

myfile.h(15) : error C2059 : syntax error

Należy również zauważyć, że przechodniość nie jest obsługiwana. Biorąc pod uwagę następujące dyrektywy,

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

kompilator wyszukuje plik two.h , a nie three.h.

Zobacz też

Dyrektywy Pragma i __pragma słowa kluczowe i _Pragma