include_alias
pragma
Gibt an, dass der Compiler actual_filename ersetzt, wenn alias_filename in einer #include
Direktive gefunden wird.
Syntax
#pragma include_alias(
"alias_filename",
"actual_filename")
#pragma include_alias(
<<>,
alias_filename actual_filename>)
Hinweise
Mit der include_alias
pragma Direktive können Sie Dateien ersetzen, die unterschiedliche Namen oder Pfade für die dateinamen enthalten, die von Quelldateien enthalten sind. Beispielsweise lassen einige Dateisysteme längere Headerdateinamen als die 8.3 FAT-Dateisystemgrenze zu. Der Compiler kann die längeren Namen nicht nur auf 8.3 abschneiden, da die ersten acht Zeichen der längeren Headerdateinamen möglicherweise nicht eindeutig sind. Wenn der Compiler die alias_filename Zeichenfolge in einer #include
Direktive sieht, ersetzt er stattdessen den Namen actual_filename . Anschließend wird die actual_filename Headerdatei geladen. Dies pragma muss vor den entsprechenden #include
Direktiven angezeigt werden. Zum Beispiel:
// 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"
Der zu suchde Alias muss exakt mit der Spezifikation übereinstimmen. Die Groß-/Kleinschreibung, schreibweise und die Verwendung von doppelten Anführungszeichen oder winkeln Klammern muss alle übereinstimmen. Der include_alias
pragma einfache Zeichenfolgenabgleich für die Dateinamen erfolgt. Es wird keine andere Dateinameüberprüfung ausgeführt. Zum Beispiel wird bei folgenden Anweisungen
#pragma include_alias("mymath.h", "math.h")
#include "./mymath.h"
#include "sys/mymath.h"
Es erfolgt keine Aliasersetzung, da die Headerdateizeichenfolgen nicht exakt übereinstimmen. Außerdem werden Headerdateinamen, die als Argumente für die /Yu
Optionen und /Yc
Compiler verwendet werden, oder die hdrstop
pragmaHeaderdateinamen nicht ersetzt. Wenn beispielsweise die Quelldatei die folgenden Anweisungen enthält,
#include <AppleSystemHeaderStop.h>
sollte die entsprechende Compileroption Folgendes sein:
/YcAppleSystemHeaderStop.h
Sie können einen include_alias
pragma beliebigen Headerdateinamen einem anderen zuordnen. Zum Beispiel:
#pragma include_alias( "api.h", "c:\version1.0\api.h" )
#pragma include_alias( <stdio.h>, <newstdio.h> )
#include "api.h"
#include <stdio.h>
Mischen Sie keine Dateinamen, die in doppelte Anführungszeichen eingeschlossen sind, mit Dateinamen, die in winkeln Klammern eingeschlossen sind. Beispielsweise ersetzt der Compiler aufgrund der obigen beiden #pragma include_alias
Direktiven keine Ersetzung für die folgenden #include
Direktiven:
#include <api.h>
#include "stdio.h"
Außerdem generiert die folgende Direktive einen Fehler:
#pragma include_alias(<header.h>, "header.h") // Error
Der in Fehlermeldungen oder als Wert des vordefinierten Makros gemeldete __FILE__
Dateiname ist der Name der Datei, nachdem die Ersetzung abgeschlossen wurde. Sehen Sie sich beispielsweise die Ausgabe nach den folgenden Direktiven an:
#pragma include_alias( "VERYLONGFILENAME.H", "myfile.h" )
#include "VERYLONGFILENAME.H"
Ein Fehler erzeugt VERYLONGFILENAME.H
die folgende Fehlermeldung:
myfile.h(15) : error C2059 : syntax error
Beachten Sie außerdem, dass transitivität nicht unterstützt wird. Im Falle der folgenden Direktiven gilt:
#pragma include_alias( "one.h", "two.h" )
#pragma include_alias( "two.h", "three.h" )
#include "one.h"
der Compiler sucht nach der Datei two.h
und nicht three.h
nach .