include_alias
pragma
Určuje, že když se alias_filename najde v #include
direktivě, kompilátor nahradí actual_filename na svém místě.
Syntaxe
#pragma include_alias(
"alias_filename",
"actual_filename")
#pragma include_alias(
< >,
< alias_filename actual_filename>)
Poznámky
Direktiva include_alias
pragma umožňuje nahradit soubory s různými názvy nebo cestami pro názvy souborů, které jsou součástí zdrojových souborů. Některé systémy souborů například umožňují delší názvy hlaviček, než je limit systému souborů FAT 8.3. Kompilátor nemůže jenom zkrátit delší názvy na 8.3, protože prvních osm znaků delších názvů záhlaví nemusí být jedinečné. Kdykoli kompilátor uvidí alias_filename řetězec v direktivě #include
, nahradí místo toho název actual_filename . Potom načte soubor hlavičky actual_filename . Musí pragma se zobrazit před odpovídajícími #include
direktivy. Příklad:
// 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, který se má hledat, musí přesně odpovídat specifikaci. Velká a pravopisná a použití dvojitých uvozovek nebo úhlových závorek se musí shodovat. Provede include_alias
pragma jednoduchý řetězec odpovídající názvům souborů. Neprovádí se žádné další ověření názvu souboru. Jsou-li například dány následující direktivy,
#pragma include_alias("mymath.h", "math.h")
#include "./mymath.h"
#include "sys/mymath.h"
Není provedeno žádné nahrazení aliasů, protože řetězce souborů hlaviček se přesně neshodují. Názvy hlaviček používané také jako argumenty /Yu
pro možnosti kompilátoru /Yc
hdrstop
pragmanebo se nenahrazují. Obsahuje-li zdrojový kód například následující direktivu,
#include <AppleSystemHeaderStop.h>
měla by odpovídající možnost kompilátoru být
/YcAppleSystemHeaderStop.h
Pomocí příkazu include_alias
pragma můžete namapovat libovolný název záhlaví na jiný. Příklad:
#pragma include_alias( "api.h", "c:\version1.0\api.h" )
#pragma include_alias( <stdio.h>, <newstdio.h> )
#include "api.h"
#include <stdio.h>
Nemíchejte názvy souborů uzavřené do dvojitých uvozovek s názvy souborů uzavřenými v úhlových závorkách. Například s ohledem na výše uvedené dvě #pragma include_alias
direktivy kompilátor nenahradí následující #include
direktivy:
#include <api.h>
#include "stdio.h"
Následující direktiva dále způsobí chybu:
#pragma include_alias(<header.h>, "header.h") // Error
Název souboru hlášený v chybových zprávách nebo jako hodnota předdefinovaného __FILE__
makra je název souboru po dokončení nahrazení. Podívejte se například na výstup za následující direktivy:
#pragma include_alias( "VERYLONGFILENAME.H", "myfile.h" )
#include "VERYLONGFILENAME.H"
Chyba vygeneruje VERYLONGFILENAME.H
následující chybovou zprávu:
myfile.h(15) : error C2059 : syntax error
Mějte také na paměti, že tranzitita není podporovaná. Jsou-li dány následující direktivy,
#pragma include_alias( "one.h", "two.h" )
#pragma include_alias( "two.h", "three.h" )
#include "one.h"
kompilátor hledá soubor two.h
, nikoli three.h
.