include_alias
pragma
Spécifie que lorsque alias_filename est trouvé dans une #include
directive, le compilateur remplace actual_filename à sa place.
Syntaxe
#pragma include_alias(
« alias_filename »,
« actual_filename »)
#pragma include_alias(
<<>,
alias_filename actual_filename>)
Notes
La include_alias
pragma directive vous permet de remplacer les fichiers qui ont différents noms ou chemins d’accès pour les noms de fichiers inclus par les fichiers sources. Par exemple, certains systèmes de fichiers autorisent des noms de fichiers d’en-tête plus longs que la limite du système de fichiers FAT 8.3. Le compilateur ne peut pas simplement tronquer les noms plus longs à 8.3, car les huit premiers caractères des noms de fichiers d’en-tête plus longs peuvent ne pas être uniques. Chaque fois que le compilateur voit la chaîne alias_filename dans une #include
directive, il remplace le nom actual_filename à la place. Ensuite, il charge le fichier d’en-tête actual_filename . Cela pragma doit apparaître avant les directives correspondantes #include
. Par exemple :
// 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 à rechercher doit correspondre exactement à la spécification. La casse, l’orthographe et l’utilisation de guillemets doubles ou de crochets d’angle doivent toutes correspondre. La include_alias
pragma chaîne effectue une correspondance simple sur les noms de fichiers. Aucune autre validation de nom de fichier n’est effectuée. Par exemple, avec les directives suivantes,
#pragma include_alias("mymath.h", "math.h")
#include "./mymath.h"
#include "sys/mymath.h"
aucune substitution d’alias n’est effectuée, car les chaînes de fichier d’en-tête ne correspondent pas exactement. En outre, les noms de fichiers d’en-tête utilisés comme arguments pour les options du /Yu
compilateur, /Yc
ou le hdrstop
pragma, ne sont pas substitués. Par exemple, si votre fichier source contient la directive suivante,
#include <AppleSystemHeaderStop.h>
l'option correspondante du compilateur doit être
/YcAppleSystemHeaderStop.h
Vous pouvez utiliser le include_alias
pragma fichier d’en-tête pour mapper n’importe quel nom de fichier d’en-tête à un autre. Par exemple :
#pragma include_alias( "api.h", "c:\version1.0\api.h" )
#pragma include_alias( <stdio.h>, <newstdio.h> )
#include "api.h"
#include <stdio.h>
Ne mélangez pas les noms de fichiers placés entre guillemets doubles avec des noms de fichiers placés entre crochets. Par exemple, étant donné les deux #pragma include_alias
directives ci-dessus, le compilateur ne remplace pas les directives suivantes #include
:
#include <api.h>
#include "stdio.h"
En outre, la directive suivante génère une erreur :
#pragma include_alias(<header.h>, "header.h") // Error
Le nom de fichier signalé dans les messages d’erreur, ou comme valeur de la macro prédéfinie __FILE__
, est le nom du fichier une fois la substitution effectuée. Par exemple, consultez la sortie après les directives suivantes :
#pragma include_alias( "VERYLONGFILENAME.H", "myfile.h" )
#include "VERYLONGFILENAME.H"
Une erreur génère VERYLONGFILENAME.H
le message d’erreur suivant :
myfile.h(15) : error C2059 : syntax error
Notez également que la transitivité n’est pas prise en charge. Avec les directives suivantes,
#pragma include_alias( "one.h", "two.h" )
#pragma include_alias( "two.h", "three.h" )
#include "one.h"
le compilateur recherche le fichier two.h
plutôt que three.h
.