Derleyici Uyarısı (düzey 4, kapalı) C4464
göreli ekleme yolu '..' içeriyor
Yönerge #include
, üst dizin tanımlayıcısı (yol kesimi) içeren bir ..
yola sahiptir.
Açıklamalar
Visual Studio 2015 Güncelleştirme 1 ve sonraki sürümlerinde, etkinleştirilirse, derleyici üst dizin yolu kesimini (..
) içeren bir #include
yönergeyi algılayabilir ve uyarı verebilir. Kod bazen dış kitaplıklardan üst bilgileri eklemek için üst dizin göreli yollarını kullanan yazılır. Bu üst dizin göreli üst bilgi yolları kaynak dosyalarda belirtildiğinde bir risk oluşturur: Programcının hedeflediğinden farklı bir üst bilgi dosyası eklenerek program derlenebilir. Bu göreli yollar diğer geliştiricilerin derleme ortamlarına taşınabilir olmayabilir.
Bunun yerine, derleme ortamında ortam değişkeni veya (Ek ekleme dizinleri) derleyici seçeneği parametreleri/I
gibi INCLUDE
bu tür üst bilgilerin yollarını belirtmenizi öneririz. Visual Studio IDE'de, projenizin Yapılandırma Özellikleri>C/C++>Genel özellik sayfasında, Ek Ekleme Dizinleri özelliğinde yolları ayarlayabilirsiniz. Bunun için belirli bir uyarı olmasa da, projenizin ekleme dizinlerini belirtirken üst dizin yolu kesimlerinin kullanılmasını da önermeyiz.
Uyarı C4464, Visual Studio 2015 Güncelleştirme 1'de yenidir ve varsayılan olarak kapalıdır. Varsayılan olarak kapalı olan tüm uyarıları etkinleştirmek için kullanın /Wall
. C4464'i düzey N
uyarısı olarak etkinleştirmek için kullanın /wN4464
(burada N
1-4 arasıdır). Daha fazla bilgi için bkz . Varsayılan olarak kapalı olan derleyici uyarıları. Belirli bir derleyici sürümünde veya sonrasında gelen uyarıları devre dışı bırakma hakkında bilgi için bkz . Derleyici sürümüne göre derleyici uyarıları.
Örnek
Yönergelerde #include
yol kesimlerini kullanan ..
kaynak kod dosyaları, C4464 etkinleştirildiğinde veya seçenek belirtildiğinde bu uyarıyı /Wall
tetikleyebilir.
Bu örnekte, proje kaynağı içinde C:\project\source
ve dış kitaplığın üst bilgi dosyaları içindedir 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
// . . .
Bu sorunu çözmek için, projenizin ekleme dizinlerinin yolunu C:\other_lib\headers
ekleyin. Ardından, üst bilgi dosyalarını dış üst bilgi olarak içerecek şekilde kaynağı değiştirin:
// 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
// . . .