include_alias
pragma
Specifica che quando alias_filename viene trovato in una #include
direttiva, il compilatore sostituisce actual_filename al suo posto.
Sintassi
#pragma include_alias(
"alias_filename",
"actual_filename")
#pragma include_alias(
<<>,
alias_filename actual_filename>)
Osservazioni:
La include_alias
pragma direttiva consente di sostituire i file con nomi o percorsi diversi per i nomi di file inclusi nei file di origine. Ad esempio, alcuni file system consentono nomi di file di intestazione più lunghi rispetto al limite di file system FAT 8.3. Il compilatore non può semplicemente troncare i nomi più lunghi a 8.3, perché i primi otto caratteri dei nomi file di intestazione più lunghi potrebbero non essere univoci. Ogni volta che il compilatore vede la stringa alias_filename in una #include
direttiva, sostituisce invece il nome actual_filename . Carica quindi il file di intestazione actual_filename. Questa pragma operazione deve essere visualizzata prima delle direttive corrispondenti #include
. Ad esempio:
// 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"
L'alias da cercare deve corrispondere esattamente alla specifica. Le maiuscole e minuscole, l'ortografia e l'uso di virgolette doppie o parentesi angolari devono corrispondere a tutte. esegue include_alias
pragma la corrispondenza di stringhe semplici sui nomi file. Non viene eseguita alcuna convalida del nome file. Se si considerando, ad esempio, le seguenti direttive,
#pragma include_alias("mymath.h", "math.h")
#include "./mymath.h"
#include "sys/mymath.h"
non viene eseguita alcuna sostituzione di alias, poiché le stringhe del file di intestazione non corrispondono esattamente. Inoltre, i nomi file di intestazione usati come argomenti per le opzioni del /Yu
compilatore e /Yc
o hdrstop
pragma, non vengono sostituiti. Ad esempio, se il file di origine contiene la seguente direttiva,
#include <AppleSystemHeaderStop.h>
l'opzione del compilatore corrispondente deve essere
/YcAppleSystemHeaderStop.h
È possibile usare per eseguire il include_alias
pragma mapping di qualsiasi nome di intestazione a un altro. Ad esempio:
#pragma include_alias( "api.h", "c:\version1.0\api.h" )
#pragma include_alias( <stdio.h>, <newstdio.h> )
#include "api.h"
#include <stdio.h>
Non combinare nomi file racchiusi tra virgolette doppie con nomi file racchiusi tra parentesi angolari. Ad esempio, date le due #pragma include_alias
direttive precedenti, il compilatore non sostituisce le direttive seguenti #include
:
#include <api.h>
#include "stdio.h"
Inoltre, la seguente diretta genera un errore:
#pragma include_alias(<header.h>, "header.h") // Error
Il nome del file segnalato nei messaggi di errore o come valore della macro predefinita __FILE__
è il nome del file al termine della sostituzione. Ad esempio, vedere l'output dopo le direttive seguenti:
#pragma include_alias( "VERYLONGFILENAME.H", "myfile.h" )
#include "VERYLONGFILENAME.H"
Un errore in VERYLONGFILENAME.H
genera il messaggio di errore seguente:
myfile.h(15) : error C2059 : syntax error
Si noti anche che la transitività non è supportata. Date le seguenti direttive,
#pragma include_alias( "one.h", "two.h" )
#pragma include_alias( "two.h", "three.h" )
#include "one.h"
il compilatore cerca il file two.h
anziché three.h
.