include_alias
pragma
Especifica que, cuando se encuentra alias_filename en una directiva #include
, el compilador sustituye actual_filename en su lugar.
Sintaxis
#pragma include_alias(
"alias_filename",
"actual_filename")
#pragma include_alias(
<alias_filename>,
<actual_filename>)
Comentarios
La directiva include_alias
pragma permite sustituir los archivos que tienen nombres o rutas de acceso diferentes para los nombres de archivo incluidos en los archivos de código fuente. Por ejemplo, algunos sistemas de archivos permiten nombres de archivo de encabezado más largos que el límite de sistema de archivos FAT 8.3. No basta con que el compilador trunque los nombres más largos a 8.3, porque los ocho primeros caracteres de los nombres de archivo de encabezado más largos pueden no ser únicos. Cada vez que el compilador ve la cadena alias_filename en una directiva #include
, sustituye el nombre actual_filename en su lugar. A continuación, carga el archivo de encabezado actual_filename. Esta directiva #include
debe aparecer antes de las directivas pragma correspondientes. Por ejemplo:
// 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"
El alias que se va a buscar debe coincidir exactamente con la especificación. Las mayúsculas y minúsculas, la ortografía y el uso de comillas dobles o corchetes angulares deben coincidir. La directiva pragmainclude_alias
hace una simple coincidencia de cadenas en los nombres de los archivos. No se realiza ninguna otra validación de nombre de archivo. Por ejemplo, dadas las siguientes directivas,
#pragma include_alias("mymath.h", "math.h")
#include "./mymath.h"
#include "sys/mymath.h"
no se realiza ninguna sustitución de alias, ya que las cadenas de archivo de encabezado no coinciden exactamente. Además, tampoco se sustituyen los nombres de archivo de encabezado utilizados como argumentos para las opciones del compilador /Yu
y /Yc
, o la directiva pragmahdrstop
. Por ejemplo, si el archivo de código fuente contiene la siguiente directiva,
#include <AppleSystemHeaderStop.h>
la opción del compilador correspondiente debe ser
/YcAppleSystemHeaderStop.h
Puede utilizar la directiva pragmainclude_alias
para asignar un nombre de archivo de encabezado a otro. Por ejemplo:
#pragma include_alias( "api.h", "c:\version1.0\api.h" )
#pragma include_alias( <stdio.h>, <newstdio.h> )
#include "api.h"
#include <stdio.h>
No mezcle los nombres de archivo delimitados por comillas con los nombres de archivo entre corchetes angulares. Por ejemplo, dadas las dos directivas #pragma include_alias
anteriores, el compilador no realiza ninguna sustitución en las siguientes directivas #include
:
#include <api.h>
#include "stdio.h"
Además, la directiva siguiente genera un error:
#pragma include_alias(<header.h>, "header.h") // Error
El nombre de archivo indicado en los mensajes de error, o como el valor de la macro __FILE__
predefinida, es el nombre del archivo una vez realizada la sustitución. Por ejemplo, consulte la salida después de las siguientes directivas:
#pragma include_alias( "VERYLONGFILENAME.H", "myfile.h" )
#include "VERYLONGFILENAME.H"
Un error en VERYLONGFILENAME.H
produce el mensaje de error siguiente:
myfile.h(15) : error C2059 : syntax error
Observe también que no se admite la transitividad. Dadas las siguientes directivas,
#pragma include_alias( "one.h", "two.h" )
#pragma include_alias( "two.h", "three.h" )
#include "one.h"
el compilador busca el archivo two.h
en lugar de three.h
.