Saya ingin tahu sakelar apa yang Anda berikan ke kompiler gcc untuk mematikan peringatan variabel yang tidak digunakan? Saya mendapatkan kesalahan dari dorongan pada windows dan saya tidak ingin menyentuh kode dorongan:
C:\boost_1_52_0/boost/system/error_code.hpp: At global scope:
C:\boost_1_52_0/boost/system/error_code.hpp:214:36: error: 'boost::system::posix_category' defined but not used [-Werror=unused-variable]
C:\boost_1_52_0/boost/system/error_code.hpp:215:36: error: 'boost::system::errno_ecat' defined but not used [-Werror=unused-variable]
C:\boost_1_52_0/boost/system/error_code.hpp:216:36: error: 'boost::system::native_ecat' defined but not used [-Werror=unused-variable]
Saya mencoba menggunakan keduanya -Wunused-value
dan -Wno-unused-value
tidak ada yang menyembunyikan pesan di atas.
Apa perintah yang benar, inilah baris kompilasi saya:
g++ -g -fno-inline -Wall -Werror -Wextra -Wfloat-equal -Wshadow
-Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings -Wno-conversion
-Wdisabled-optimization -Wredundant-decls -Wunused-value -Wno-deprecated
-IC:\\boost_1_52_0 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64
-c -o op.o op.cpp
Mungkin -Wall
mengesampingkan tujuan saya?
c++
gcc
compiler-warnings
compiler-flags
WilliamKF
sumber
sumber
-Werror=no-unused-variable
Jawaban:
The
-Wno-unused-variable
saklar biasanya melakukan trik. Namun, itu adalah peringatan yang sangat berguna jika Anda peduli tentang hal-hal ini dalam proyek Anda. Ini menjadi menjengkelkan ketika GCC mulai memperingatkan Anda tentang hal-hal yang tidak ada dalam kode Anda.Saya akan merekomendasikan Anda menjaga peringatan, tapi menggunakan
-isystem
bukannya-I
untuk menyertakan direktori proyek pihak ketiga. Tanda tersebut memberi tahu GCC untuk tidak memperingatkan Anda tentang hal-hal yang tidak dapat Anda kendalikan.Misalnya, alih-alih
-IC:\\boost_1_52_0
, katakan-isystem C:\\boost_1_52_0
.Semoga membantu. Semoga berhasil!
sumber
-Wno-unused-parameter
parameter fungsi yang tidak digunakan,-Wno-unused-function
untuk fungsi yang tidak digunakan-Wno-unused-but-set-variable -Wno-unused-parameter -Wno-unused-variable
Terkadang Anda hanya perlu menekan beberapa peringatan saja dan Anda ingin menyimpan peringatan lain, agar aman. Di kode Anda, Anda dapat menyembunyikan peringatan untuk variabel dan bahkan parameter formal dengan menggunakan atribut GCC yang tidak digunakan . Katakanlah Anda memiliki cuplikan kode ini:
void func(unsigned number, const int version) { unsigned tmp; std::cout << number << std::endl; }
Mungkin ada situasi, ketika Anda perlu menggunakan fungsi ini sebagai penangan - yang (imho) cukup umum di pustaka C ++ Boost. Kemudian Anda memerlukan versi parameter formal kedua , jadi tanda tangan fungsinya sama dengan template yang dibutuhkan penangan, jika tidak kompilasi akan gagal. Tetapi Anda juga tidak benar-benar membutuhkannya dalam fungsi itu sendiri ...
Solusi cara menandai variabel atau parameter formal untuk dikecualikan dari peringatan adalah ini:
void func(unsigned number, const int version __attribute__((unused))) { unsigned tmp __attribute__((unused)); std::cout << number << std::endl; }
GCC memiliki banyak parameter lain, Anda dapat memeriksanya di halaman manual . Ini juga berfungsi untuk program C, tidak hanya C ++, dan saya pikir ini dapat digunakan di hampir semua fungsi, bukan hanya penangan. Silakan dan coba! ;)
PS: Akhir-akhir ini saya menggunakan ini untuk menekan peringatan serialisasi Boosts di template seperti ini:
template <typename Archive> void serialize(Archive &ar, const unsigned int version __attribute__((unused)))
EDIT: Rupanya, saya tidak menjawab pertanyaan Anda seperti yang Anda butuhkan, drak0sha melakukannya dengan lebih baik. Itu karena saya terutama mengikuti judul pertanyaan, kesalahanku. Semoga ini bisa membantu orang lain, yang sampai ke sini karena gelar itu ... :)
sumber
void func(unsigned number, const int)
. Kemudian, gcc juga tidak akan mengeluh karena tidak digunakanversion
.gcc
versi yang Anda gunakan. IIRC, saya harus menggunakannya 4 tahun yang lalu, untuk menekan peringatan tentang yang tidak digunakanversion
. ;)Jika Anda menggunakan gcc dan ingin menonaktifkan peringatan untuk kode yang dipilih, Anda dapat menggunakan arahan kompilator #pragma:
#pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wunused-variable" ( your problematic library includes ) #pragma GCC diagnostic pop
Untuk kode yang Anda kendalikan, Anda juga dapat menggunakan
__attribute__((unused))
untuk menginstruksikan compiler bahwa variabel tertentu tidak digunakan.sumber
#pragma
benar-benar aman jika Anda membungkusnya#ifdef some_compiler ... #endif
. Peringatan adalah fitur khusus kompiler dan tidak ditentukan oleh standar. Anda tidak dapat menyembunyikan peringatan apa pun dari kode tanpa#pragma
s.Lihat di
man gcc
bawah Opsi Peringatan. Di sana Anda memiliki sejumlah besarunused
Jika Anda mengawali salah satu dari mereka dengan
no-
, itu akan menonaktifkan peringatan ini.Penjelasan lebih rinci dapat ditemukan di Options to Request atau Suppress Warnings
sumber
Penggunaan
-Wno-unused-variable
harus bekerja.sumber
-Wno-error=unused-variable
jika Anda ingin menghapus kesalahan dan menyimpan peringatannya.[-Werror=unused-variable]
.Kompilator sudah memberi tahu Anda, bukan
value
tetapivariable
. Anda sedang mencari-Wno-unused-variable
. Selain itu, cobag++ --help=warnings
lihat daftar opsi yang tersedia.sumber
Anda mengunjungi Boost's Trac dan mengajukan laporan bug terhadap Boost.
Aplikasi Anda tidak bertanggung jawab untuk menghapus peringatan dan kesalahan perpustakaan. Perpustakaan bertanggung jawab untuk membersihkan peringatan dan kesalahannya sendiri.
sumber
-Wall
dan-Wextra
menyetel tahapan di GCC dan tahapan berikutnya-Wno-unused-variable
mungkin tidak berlaku. Misalnya, jika Anda memiliki:CFLAGS += -std=c99 -pedantic -pedantic-errors -Werror -g0 -Os \ -fno-strict-overflow -fno-strict-aliasing \ -Wall -Wextra \ -pthread \ -Wno-unused-label \ -Wno-unused-function \ -Wno-unused-parameter \ -Wno-unused-variable \ $(INC)
lalu GCC melihat instruksi tersebut
-Wall -Wextra
dan sepertinya mengabaikan-Wno-unused-variable
Ini sebaliknya dapat terlihat seperti ini di bawah dan Anda mendapatkan efek yang diinginkan karena tidak dihentikan dalam kompilasi Anda pada variabel yang tidak digunakan:
CFLAGS += -std=c99 -pedantic -pedantic-errors -Werror -g0 -Os \ -fno-strict-overflow -fno-strict-aliasing \ -pthread \ -Wno-unused-label \ -Wno-unused-function \ $(INC)
Ada alasan bagus mengapa ini disebut "peringatan" vs "kesalahan". Gagal mengkompilasi hanya karena kode Anda tidak lengkap (katakanlah Anda menghentikan algoritme) dapat merugikan.
sumber
export IGNORE_WARNINGS=1
Itu memang menampilkan peringatan, tetapi berlanjut dengan build
sumber