Compiler Warning (level 4, off) C4464
relative include path contains '..'
Direktif #include
memiliki jalur yang menyertakan penentu direktori induk ( ..
segmen jalur).
Keterangan
Di Visual Studio 2015 Update 1 dan versi yang lebih baru, jika diaktifkan, pengkompilasi dapat mendeteksi dan mengeluarkan peringatan untuk #include
arahan yang berisi segmen jalur direktori induk (..
). Kode terkadang ditulis yang menggunakan jalur relatif direktori induk untuk menyertakan header dari pustaka eksternal. Ketika jalur header direktori-relatif induk ini ditentukan dalam file sumber, itu membuat risiko: Program dapat dikompilasi dengan menyertakan file header yang berbeda dari yang diinginkan programmer. Jalur relatif ini mungkin tidak portabel ke lingkungan build pengembang lain.
Sebagai gantinya, kami sarankan Anda menentukan jalur ke header tersebut di lingkungan build, seperti dalam INCLUDE
variabel lingkungan atau dalam parameter ke /I
opsi pengkompilasi (Tambahan termasuk direktori). Di IDE Visual Studio, Anda dapat mengatur jalur di halaman properti Properti>Konfigurasi C/C++>Umum proyek Anda, di properti Sertakan Direktori Tambahan. Meskipun tidak ada peringatan khusus untuk itu, kami juga tidak merekomendasikan penggunaan segmen jalur direktori induk saat Anda menentukan direktori include proyek Anda.
Peringatan C4464 baru di Visual Studio 2015 Update 1, dan nonaktif secara default. Gunakan /Wall
untuk mengaktifkan semua peringatan yang nonaktif secara default. Gunakan /wN4464
untuk mengaktifkan C4464 sebagai peringatan tingkat N
(di mana N
1-4). Untuk informasi selengkapnya, lihat Peringatan pengkompilasi yang nonaktif secara default. Untuk informasi tentang cara menonaktifkan peringatan yang diperkenalkan di atau setelah versi kompilator tertentu, lihat Peringatan pengompilasi berdasarkan versi kompilator.
Contoh
File kode sumber yang menggunakan ..
segmen jalur dalam #include
arahan dapat memicu peringatan ini ketika C4464 diaktifkan atau ketika /Wall
opsi ditentukan.
Dalam contoh ini, sumber proyek berada di C:\project\source
dan file header pustaka eksternal berada di 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
// . . .
Untuk memperbaiki masalah ini, tambahkan jalur C:\other_lib\headers
ke direktori sertakan proyek Anda. Kemudian, ubah sumber untuk menyertakan file header sebagai header eksternal:
// 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
// . . .