Bagikan melalui


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