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

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

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

解説

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

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

警告 C4464 は Visual Studio 2015 Update 1 の新機能であり、既定ではオフになっています。 既定でオフになっているすべての警告を有効にするために使用 /Wall します。 C4464 をレベルN警告として有効にする場合に使用/wN4464します (N1 から 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 を追加します。 次に、ソースを変更して、ヘッダー ファイルを外部ヘッダーとして含めます。

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