共用方式為


編譯程式警告 (層級 4, 關閉) C4464

相對 Include 路徑包含 '..'

指示 #include 詞的路徑包含父目錄規範( .. 路徑區段)。

備註

在 Visual Studio 2015 Update 1 和更新版本中,如果啟用,編譯程式可以偵測併發出包含父目錄路徑區段的指示詞警告#include.. 程式代碼有時會撰寫,使用父目錄相對路徑來包含外部連結庫的標頭。 在原始程序檔中指定這些父目錄相對標頭路徑時,會產生風險:程式可以藉由包含與程式設計人員想要的不同頭檔來編譯。 這些相對路徑可能無法移植到其他開發人員的建置環境。

相反地,建議您在建置環境中指定這類標頭的路徑,例如 INCLUDE 環境變數或參數中的 /I (其他 include 目錄) 編譯程式選項。 在 Visual Studio IDE 中,您可以在 [其他 Include Directory] 屬性的 [其他包含目錄] 屬性中,設定專案 [組態屬性>C/C++>General] 屬性頁的路徑。 雖然沒有特定的警告,但是當您指定專案的 Include 目錄時,我們也不建議使用父目錄路徑區段。

Visual Studio 2015 Update 1 中的警告 C4464 是新的,且預設為關閉。 使用 /Wall 來啟用預設關閉的所有警告。 使用 /wN4464 來啟用 C4464 作為層級 N 警告(其中 N 為 1-4)。 如需詳細資訊,請參閱 默認關閉的編譯程式警告。 如需如何停用特定編譯程式版本或之後所引進警告的資訊,請參閱 編譯程式版本的編譯程式警告。

範例

在指示詞中使用 .. 路徑區段的 #include 原始碼檔案可以在啟用 C4464 或指定 選項時 /Wall 觸發此警告。

在這裡範例中,專案來源位於 , C:\project\source 而外部連結庫的標頭檔位於 C:\other_lib\headers中:

// C:\project\source\C4464.cpp
// Compile by using: cl /w14464 C4464.cpp
#include "..\..\other_lib\headers\other.h"          // C4464
#include "..\..\other_lib\headers\extras\nested.h"  // C4464
// . . .

若要修正此問題,請將路徑 C:\other_lib\headers 新增至專案的 include 目錄。 然後,將來源變更為包含頭檔做為外部標頭:

// C:\project\source\C4464b.cpp
// Compile by using: cl /w14464 /I"C:\other_lib\headers" C4464b.cpp
#include <other.h>  // OK
#include <extras\nested.h>  // OK
// . . .