Dela via


include_alias pragma

Anger att när alias_filename hittas i ett #include direktiv ersätter kompilatorn actual_filename i dess ställe.

Syntax

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

Anmärkningar

Med include_aliaspragma-direktivet kan du ersätta filer med olika namn eller sökvägar för filnamnen som ingår i källfilerna. Vissa filsystem tillåter till exempel längre rubrikfilnamn än 8.3 FAT-filsystemgränsen. Kompilatorn kan inte bara trunkera de längre namnen till 8.3, eftersom de första åtta tecknen i de längre rubrikfilnamnen kanske inte är unika. När kompilatorn ser alias_filename strängen i ett #include-direktiv ersätter den namnet actual_filename i stället. Sedan läses actual_filename-huvudfilen in. Denna pragma måste visas före motsvarande #include direktiv. Till exempel:

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

Aliaset som ska sökas efter måste matcha specifikationen exakt. Skiftläge, stavning och användning av dubbla citattecken eller vinkelparenteser måste alla matcha. Den include_aliaspragma gör enkel strängmatchning på filnamnen. Ingen annan validering av filnamn utförs. Med tanke på följande direktiv är det till exempel

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

ingen aliasersättning görs eftersom huvudfilsträngarna inte matchar exakt. Huvudfilnamn som används som argument för /Yu och /Yc kompilatoralternativ, eller hdrstoppragma, ersätts inte. Om källfilen till exempel innehåller följande direktiv,

#include <AppleSystemHeaderStop.h>

motsvarande kompilatoralternativ bör vara

/YcAppleSystemHeaderStop.h

Du kan använda include_aliaspragma för att mappa valfritt huvudfilnamn till ett annat. Till exempel:

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

Blanda inte filnamn som omges av dubbla citattecken med filnamn inom vinkelparenteser. Med tanke på ovanstående två #pragma include_alias direktiv ersätter kompilatorn till exempel inte följande #include direktiv:

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

Dessutom genererar följande direktiv ett fel:

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

Filnamnet som rapporteras i felmeddelanden, eller som värdet för det fördefinierade __FILE__ makrot, är namnet på filen när ersättningen är klar. Se till exempel utdata efter följande direktiv:

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

Ett fel i VERYLONGFILENAME.H genererar följande felmeddelande:

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

Observera också att transitivitet inte stöds. Med hänsyn till följande direktiv

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

kompilatorn söker efter filen two.h i stället för three.h.

Se även

Pragma-direktiv och nyckelorden __pragma och _Pragma