include_alias pragma

#include ディレクティブで alias_filename が見つかった場合に、コンパイラが代わりに actual_filename に置き換えることを指定します。

構文

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

解説

include_aliaspragma ディレクティブを使用すると、ソース ファイルによって含まれるファイル名を、異なる名前またはパスを持つファイルに置き換えることができます。 たとえば、一部のファイル システムでは、FAT ファイル システムの 8.3 制限よりも長いヘッダー ファイル名が許可されます。 長いヘッダー ファイル名の最初の 8 文字は一意でない可能性があるため、コンパイラは、長い名前を 8.3 形式に切り詰めることはできません。 コンパイラは、#include ディレクティブで alias_filename 文字列を認識するたびに、代わりに名前 actual_filename に置き換えます。 次に、actual_filename ヘッダー ファイルを読み込みます。 この pragma は、対応する #include ディレクティブよりも前に記述する必要があります。 次に例を示します。

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

検索する別名は、仕様と正確に一致している必要があります。 大文字と小文字の区別、スペル、二重引用符と山かっこの使用がすべて一致している必要があります。 include_aliaspragma は、ファイル名に対して単純な文字列照合を行います。 他のファイル名検証は実行されません。 たとえば、次のようなディレクティブがあるとします。

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

ヘッダー ファイル文字列が正確に一致しないため、別名置換は実行されません。 また、/Yu/Yc のコンパイラ オプションへの引数として使用されるヘッダー ファイル名や、hdrstoppragma も、置き換えられません。 たとえば、ソース ファイルに次のディレクティブが含まれている場合、

#include <AppleSystemHeaderStop.h>

対応するコンパイラ オプションは、次のようになります。

/YcAppleSystemHeaderStop.h

include_aliaspragma を使用して、任意のヘッダー ファイル名を別のヘッダー ファイル名にマップすることができます。 次に例を示します。

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

二重引用符で囲んだファイル名と山かっこで囲んだファイル名を混同しないでください。 たとえば、前の 2 つの #pragma include_alias ディレクティブを指定すると、コンパイラは次の #include ディレクティブで置換を実行しません。

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

さらに、次のディレクティブはエラーになります。

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

エラー メッセージで報告されるファイル名、または定義済みの __FILE__ マクロの値として報告されるファイル名は、置換実行後のファイル名です。 たとえば、次のディレクティブの後の出力を参照してください。

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

VERYLONGFILENAME.H にエラーがあると、次のエラー メッセージが生成されます。

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

また、推移もサポートされません。 次のようなディレクティブがあるとします。

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

コンパイラは、three.h ではなくファイル two.h を検索します。

関連項目

pragma ディレクティブと __pragma および _Pragma キーワード