Compartilhar via


include_alias pragma

Especifica que, quando alias_filename é encontrado em uma diretiva #include, o compilador substitui actual_filename em seu lugar.

Sintaxe

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

Comentários

A diretiva include_aliaspragma permite substituir arquivos que têm nomes ou caminhos diferentes para os nomes de arquivo incluídos pelos arquivos de origem. Por exemplo, alguns sistemas de arquivos permitem nomes de arquivo de cabeçalho mais longos do que o limite do sistema de arquivos FAT 8.3. O compilador não pode simplesmente truncar nomes mais longos para 8.3, pois os primeiros oito caracteres dos nomes de arquivos de cabeçalho mais longos podem não ser exclusivos. Sempre que o compilador vê a cadeia de caracteres alias_filename em uma diretiva #include, ele substitui o nome actual_filename. Em seguida, ele carrega o arquivo de cabeçalho actual_filename. Esse pragma deve aparecer antes das políticas #include correspondentes. Por exemplo:

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

O alias a ser pesquisado deve corresponder exatamente à especificação. O caso, a ortografia e o uso de aspas duplas ou colchetes angulares devem corresponder. O pragmainclude_alias faz correspondência simples de cadeia de caracteres nos nomes de arquivo. Nenhuma outra validação de nome de arquivo é executada. Por exemplo, dadas as seguintes políticas,

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

Nenhuma substituição de alias é feita, já que não há correspondência exata das cadeias de caracteres de arquivo de cabeçalho. Além disso, os nomes de arquivos de cabeçalho usados como argumentos para as opções do compilador /Yu e /Yc, ou o hdrstoppragma, não são substituídos. Por exemplo, se o arquivo de origem contiver a seguinte política,

#include <AppleSystemHeaderStop.h>

a opção do compilador correspondente deve ser

/YcAppleSystemHeaderStop.h

Você pode usar o include_aliaspragma para mapear qualquer nome de arquivo de cabeçalho para outro. Por exemplo:

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

Não misture nomes de arquivos incluídos entre aspas duplas com nomes de arquivos entre colchetes angulares. Por exemplo, nas duas diretivas #pragma include_alias#include acima, o compilador não executa nenhuma substituição nas seguintes diretivas:

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

Além disso, a política a seguir gera um erro:

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

O nome de arquivo relatado nas mensagens de erro, ou como o valor da macro __FILE__ predefinida, é o nome do arquivo após a substituição estar concluída. Por exemplo, confira a saída após as seguintes diretivas:

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

Um erro em VERYLONGFILENAME.H gera a seguinte mensagem de erro:

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

Observe também que não há suporte para transitividade. Dadas as seguintes políticas,

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

o compilador procura pelo arquivo two.h, em vez de three.h.

Confira também

Pragmadiretivas e as __pragma palavras-chave e _Pragma