Ostrzeżenie kompilatora (poziom 4, wyłączony) C4464
względna ścieżka dołączania zawiera '.'
#include
Dyrektywa ma ścieżkę zawierającą ..
specyfikator katalogu nadrzędnego (segment ścieżki).
Uwagi
W programie Visual Studio 2015 Update 1 lub nowszym, jeśli jest włączona, kompilator może wykryć i wydać ostrzeżenie dla #include
dyrektywy zawierającej segment ścieżki katalogu nadrzędnego (..
). Kod jest czasami zapisywany, który używa ścieżek względnych katalogu nadrzędnego do dołączania nagłówków z bibliotek zewnętrznych. Gdy te nadrzędne ścieżki nagłówków względnych są określone w plikach źródłowych, tworzy ryzyko: program może zostać skompilowany przez dołączenie innego pliku nagłówka niż zamierza programista. Te ścieżki względne mogą nie być przenośne do środowisk kompilacji innych deweloperów.
Zamiast tego zalecamy określenie ścieżek do takich nagłówków w środowisku kompilacji, takich jak w INCLUDE
zmiennej środowiskowej lub parametrach do opcji kompilatora /I
(Dodatkowe katalogi dołączania). W środowisku IDE programu Visual Studio można ustawić ścieżki na stronie właściwości>konfiguracji projektu C/C++>General we właściwości Dodatkowe katalogi dołączania. Chociaż nie ma dla niego określonego ostrzeżenia, nie zalecamy również używania segmentów ścieżki katalogu nadrzędnego podczas określania katalogów dołączania projektu.
Ostrzeżenie C4464 jest nowe w programie Visual Studio 2015 Update 1 i jest domyślnie wyłączone. Użyj /Wall
polecenia , aby włączyć wszystkie ostrzeżenia, które są domyślnie wyłączone. Użyj /wN4464
polecenia , aby włączyć C4464 jako ostrzeżenie na poziomie N
(gdzie N
ma wartość 1–4). Aby uzyskać więcej informacji, zobacz Ostrzeżenia kompilatora, które są domyślnie wyłączone. Aby uzyskać informacje na temat wyłączania ostrzeżeń wprowadzonych w określonej wersji kompilatora lub po określonej wersji, zobacz Ostrzeżenia kompilatora według wersji kompilatora.
Przykład
Pliki kodu źródłowego korzystające z ..
segmentów ścieżki w #include
dyrektywach mogą wyzwalać to ostrzeżenie, gdy jest włączone C4464 lub po określeniu /Wall
opcji.
W tym przykładzie źródło projektu znajduje się w C:\project\source
pliku , a pliki nagłówkowe biblioteki zewnętrznej znajdują się w pliku 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
// . . .
Aby rozwiązać ten problem, dodaj ścieżkę C:\other_lib\headers
do katalogów dołączania projektu. Następnie zmień źródło, aby uwzględnić pliki nagłówka jako nagłówki zewnętrzne:
// 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
// . . .