include_alias
pragma
指定在 指示詞中找到alias_filename時 ,編譯器會取代 其位置中的actual_filename 。 #include
語法
#pragma include_alias(
「 alias_filename 」,
「 actual_filename 」)
#pragma include_alias(
<<>,
alias_filename actual_filename>)
備註
指示 include_alias
pragma 詞可讓您將具有不同名稱或路徑的檔案取代為原始程式檔所包含的檔案名。 例如,某些檔案系統允許的標標頭檔名比 8.3 FAT 檔案系統限制還要長。 編譯器不能只截斷較長的名稱為 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_alias
pragma 對檔案名執行簡單的字串比對。 不會執行其他檔案名驗證。 例如,假設有下列指示詞:
#pragma include_alias("mymath.h", "math.h")
#include "./mymath.h"
#include "sys/mymath.h"
沒有完成別名替代,因為標頭檔字串不完全相符。 此外,不會取代做為 和 編譯器選項之 /Yu
引數的標標頭檔名, 或 hdrstop
pragma 。 /Yc
例如,如果原始程式檔包含下列指示詞:
#include <AppleSystemHeaderStop.h>
則對應的編譯器選項應該是
/YcAppleSystemHeaderStop.h
您可以使用 include_alias
pragma 將任何標標頭檔名對應至另一個標頭。 例如:
#pragma include_alias( "api.h", "c:\version1.0\api.h" )
#pragma include_alias( <stdio.h>, <newstdio.h> )
#include "api.h"
#include <stdio.h>
請勿混合以雙引號括住的檔案名與以角括弧括住的檔案名。 例如,假設上述兩 #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"
編譯器會搜尋 檔案 two.h
,而不是 three.h
。
另請參閱
意見反映
https://aka.ms/ContentUserFeedback。
即將推出:我們會在 2024 年淘汰 GitHub 問題,並以全新的意見反應系統取代並作為內容意見反應的渠道。 如需更多資訊,請參閱:提交及檢視以下的意見反映: