Предупреждение компилятора (уровень 4, выключен) C4464

относительный путь включения содержит ".".

Директива #include содержит путь, содержащий описатель родительского каталога ( .. сегмент пути).

Замечания

В Visual Studio 2015 с обновлением 1 и более поздних версий компилятор может обнаруживать и выдавать предупреждение для #include директивы, содержащей сегмент пути родительского каталога (..). Иногда код записывается, использующий относительные пути родительского каталога для включения заголовков из внешних библиотек. Если эти пути заголовка относительно родительского каталога указываются в исходных файлах, он создает риск: программа может быть скомпилирована, включив другой файл заголовка, чем программист намерен. Эти относительные пути могут быть не переносимыми в другие среды сборки разработчиков.

Вместо этого рекомендуется указать пути к таким заголовкам в среде сборки, например INCLUDE в переменной среды или в параметрах /I для параметра компилятора (дополнительные каталоги включения). В интегрированной среде разработки Visual Studio можно задать пути на странице свойств>конфигурации проекта C/C++>General в свойстве "Дополнительные каталоги включения". Хотя для него нет определенного предупреждения, мы также не рекомендуем использовать сегменты пути родительского каталога при указании каталогов включаемых каталогов проекта.

Предупреждение C4464 новое в Visual Studio 2015 с обновлением 1 и по умолчанию отключено. Используйте /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 к каталогам включаемого проекта. Затем измените источник, чтобы включить файлы заголовков в качестве внешних заголовков:

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