Saya memiliki proyek yang menggunakan perpustakaan log4cxx, boost, dll. Yang headernya menghasilkan banyak peringatan (berulang). Apakah ada cara untuk menyembunyikan peringatan dari library include (mis. #Include <some-header.h>) atau include dari jalur tertentu? Saya ingin menggunakan -Wall dan / atau -Wextra seperti biasa pada kode proyek tanpa adanya info relevan yang dikaburkan. Saat ini saya menggunakan grep untuk membuat keluaran tetapi saya ingin sesuatu yang lebih baik.
126
extern "C"
, yang menyebabkan kesalahan ganjil tentang tautan C jika Anda#include
menggunakan header C ++ di-isystem
jalur.Bagi mereka yang menggunakan CMake, Anda dapat mengubah
include_directories
arahan Anda untuk menyertakan simbolSYSTEM
yang menekan peringatan terhadap header tersebut.sumber
${LIBFOO_USE_FILE}
variabel yang akan digunakan dengan perintah include () CMake ?easylogging++
dan saya mendapatkan sejumlah besar peringatan yang sama darieasylogging++.h
meskipun folder tempatnya berada telah disertakan denganSYSTEM
opsi.Anda bisa menggunakan pragma. Sebagai contoh:
sumber
gcc
cl
juga memiliki kemampuan selama bertahun-tahun ... Terkadanggcc
agak lambat dalam beradaptasi.Saya menemukan triknya. Untuk penyertaan pustaka, alih-alih
-Idir
digunakan-isystem dir
di makefile. GCC kemudian memperlakukan boost dll karena sistem menyertakan dan mengabaikan peringatan apa pun darinya.sumber
#pragma
adalah instruksi untuk kompilator. Anda dapat mengatur sesuatu sebelum #include dan menonaktifkannya setelahnya.Anda juga dapat melakukannya di baris perintah .
Halaman GCC lain secara khusus tentang menonaktifkan peringatan .
Saya akan memilih opsi untuk menggunakan # pragma dalam kode sumber, dan kemudian memberikan alasan yang masuk akal (sebagai komentar) mengapa Anda menonaktifkan peringatan. Ini berarti alasan tentang file header.
GCC melakukan pendekatan ini dengan mengklasifikasikan jenis peringatan. Anda dapat mengklasifikasikannya menjadi peringatan atau untuk diabaikan. Artikel yang ditautkan sebelumnya akan menunjukkan kepada Anda peringatan mana yang mungkin dinonaktifkan.
Catatan: Anda juga dapat memijat kode sumber untuk mencegah peringatan tertentu dengan menggunakan atribut ; namun, ini mengikat Anda cukup dekat dengan GCC.
Note2: GCC juga menggunakan antarmuka pop / push seperti yang digunakan di kompiler microsoft - Microsoft menonaktifkan peringatan melalui antarmuka ini. Saya sarankan Anda menyelidiki ini lebih lanjut, karena saya bahkan tidak tahu apakah itu mungkin.
sumber
Anda dapat mencoba menggunakan header yang telah dikompilasi sebelumnya . Peringatan tidak akan hilang tetapi setidaknya tidak akan muncul di kompilasi utama Anda.
sumber
-isystem
, tapi ingat untuk menggunakannya baik dalam kompilasi tajuk dan dalam kode)Jika Anda perlu mengganti header sistem secara eksplisit maka Anda dibatasi untuk pragma. Anda dapat memverifikasi termasuk yang Anda gunakan melalui
make depend
keluaran.Lihat juga diagnostik push-pop untuk gcc> = 4.6
sumber
Menempatkan berikut ini
akan mematikan peringatan GCC untuk semua kode berikut di file ini.
sumber
Harus ada alasan untuk peringatan tersebut. Ini bisa disebabkan oleh kesalahan dalam kode Anda yang menggunakan perpustakaan, atau oleh kesalahan dalam kode perpustakaan itu sendiri. Dalam kasus pertama, perbaiki kode Anda. Dalam kasus kedua, berhenti menggunakan pustaka atau jika itu adalah kode FOSS, perbaiki.
sumber