Share via


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

relative include path contains '..'

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

備註

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

相反地,建議您在建置環境中指定這類標頭的路徑,例如 INCLUDE 環境變數或參數中的 /I (其他 include 目錄) 編譯器選項。 在 Visual Studio IDE 中,您可以在專案的 [組態屬性 > C/C++ > 一般 ] 屬性頁面中,于 [其他包含目錄 ] 屬性中 設定路徑。 雖然沒有特定的警告,但是當您指定專案的 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
// . . .