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_aliaspragma 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_aliaspragma 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 hdrstoppragmaHeaderdateinamen 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_aliaspragma 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.hnach .

Siehe auch

PragmaDirektiven und Schlüsselwörter __pragma _Pragma