次の方法で共有


コンパイラの警告 (レベル 4、オフ) C4464

相対インクルード パスに '..' が含まれています

#include ディレクティブには、親ディレクトリ指定子 (.. パス セグメント) を含むパスがあります。

解説

Visual Studio 2015 Update 1 以降のバージョンでは、有効になっている場合、コンパイラは親ディレクトリ パス セグメント (..) を含む#include ディレクティブを検出して警告を発行できます。 外部ライブラリのヘッダーを含めるために、親ディレクトリの相対パスを使用するコードが記述される場合があります。 これらの親ディレクトリ相対ヘッダー パスがソース ファイルで指定されると、リスクが発生します。プログラムは、プログラマが意図したとは異なるヘッダー ファイルを含めることでコンパイルできます。 これらの相対パスは、他の開発者のビルド環境に移植できない場合があります。

代わりに、ビルド環境でこのようなヘッダーへのパスを指定することをお勧めします。たとえば、 INCLUDE 環境変数や、 /I のパラメーター (追加インクルード ディレクトリ)、コンパイラ オプション 。 Visual Studio IDE では、プロジェクトの Configuration Properties>C/C++>General プロパティ ページの Additional Include Directories プロパティでパスを設定できます。 具体的な警告はありませんが、プロジェクトのインクルード ディレクトリを指定するときに、親ディレクトリ パス セグメントを使用することもお勧めしません。

警告 C4464 は Visual Studio 2015 Update 1 の新機能であり、既定ではオフになっています。 既定でオフになっているすべての警告を有効にするには、 /Wall を使用します。 /wN4464を使用して C4464 を警告レベルN有効にします (Nは 1 から 4)。 詳細については、「既定で無効になっているコンパイラ警告」を参照してください。 特定のコンパイラ バージョンで、またはその後に発生する警告を無効にする方法については、「コンパイラ バージョン別の Compiler の警告を参照してください。

#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 パスを追加します。 次に、ソースを変更して、ヘッダー ファイルを外部ヘッダーとして含めます。

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