Pertanyaan Bagaimana Anda menonaktifkan peringatan variabel yang tidak digunakan yang keluar dari gcc dalam kode pihak ketiga yang tidak ingin saya edit?


Saya ingin tahu apa yang Anda beralih ke gcc compiler untuk mematikan peringatan variabel yang tidak digunakan? Saya mendapatkan kesalahan karena peningkatan di jendela 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 tetapi tidak menekan pesan di atas.

Apa perintah yang benar, di sini adalah garis 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 menimpa tujuan saya?


75
2018-02-24 16:24


asal


Jawaban:


Itu -Wno-unused-variable switch 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 untuk terus memperingatkan, tetapi gunakan -isystem dari pada -I untuk menyertakan direktori proyek pihak ketiga. Bendera itu memberi tahu GCC untuk tidak memperingatkan Anda tentang hal-hal yang tidak dapat Anda kendalikan.

Misalnya, alih-alih -IC:\\boost_1_52_0, katakanlah -isystem C:\\boost_1_52_0.

Semoga itu membantu. Semoga berhasil!


195
2018-02-24 16:31



Terkadang Anda hanya perlu menekan hanya beberapa peringatan dan Anda ingin menyimpan peringatan lainnya, agar aman. Dalam kode Anda, Anda dapat menekan peringatan untuk variabel dan bahkan parameter formal dengan menggunakan GCC tidak terpakai atribut. 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 handler - yang (imho) cukup umum di C + + Boost library. Maka Anda perlu parameter formal kedua versi, sehingga tanda tangan fungsi ini sama dengan template yang dibutuhkan pawang, jika tidak kompilasi akan gagal. Tapi Anda tidak benar-benar membutuhkannya dalam fungsi itu sendiri ...

Solusi bagaimana menandai variabel atau parameter formal untuk dikeluarkan 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 itu dapat digunakan di hampir semua fungsi, bukan hanya penangan. Silakan dan coba! ;)

P.S .: Akhir-akhir ini saya menggunakan ini untuk menekan peringatan dari serialisasi Boost dalam 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, saya yang buruk. Semoga ini bisa membantu orang lain, yang datang ke sini karena judul itu ... :)


59
2018-04-28 02:22



Jika Anda menggunakan gcc dan ingin menonaktifkan peringatan untuk kode yang dipilih, Anda dapat menggunakan direktif compiler #pragma:

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-variable"
( your problematic library includes )
#pragma GCC diagnostic pop

Untuk kode yang Anda kontrol, Anda juga dapat menggunakan __attribute__((unused)) untuk menginstruksikan compiler bahwa variabel tertentu tidak digunakan.


56
2018-03-28 09:17



Lihat man gcc di bawah Opsi Peringatan. Di sana Anda memiliki sejumlah besar unused 

Opsi Peringatan
  ... -Wunused -Wunused-function -Wunused-label -Wunused-parameter -Wunused-value -Wunused-variable -Wunused-tapi-set-parameter -Wunused-tetapi-set-variabel

Jika Anda awali salah satunya dengan no-, itu akan menonaktifkan peringatan ini.

Banyak opsi memiliki nama panjang yang dimulai dengan -f atau dengan -W --- misalnya, -fmove-loop-invariants, -Wformat dan seterusnya. Sebagian besar memiliki bentuk positif dan negatif; bentuk negatif dari -ffoo akan menjadi -fno-foo. Manual ini hanya mendokumentasikan satu dari dua bentuk ini, yang mana pun yang bukan default.

Penjelasan lebih rinci dapat ditemukan di Pilihan untuk Meminta atau Menekan Peringatan


13
2018-02-24 16:30



Menggunakan -Wno-unused-variable harus bekerja.


9
2018-02-24 16:26



Compiler sudah memberi tahu Anda, itu bukan value tapi variable. Anda sedang mencari -Wno-unused-variable. Juga coba g++ --help=warnings untuk melihat daftar opsi yang tersedia.


3
2018-02-24 16:28



Bagaimana Anda menonaktifkan peringatan variabel yang tidak digunakan yang keluar dari gcc?
  Saya mendapatkan kesalahan dari peningkatan pada windows dan saya tidak ingin menyentuh kode peningkatan ...

Kamu 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 menghapus peringatan dan kesalahannya sendiri.


1
2017-07-26 19:52



Hapus -Wall dan seharusnya berhasil. Masalah dengan menghapus -Wall apakah itu juga akan menekan peringatan yang sah. Anda harus memilih tangan -W opsi dalam hal ini atau ubah menjadi -Wno-unused-variable setelah Anda memiliki semua peringatan tertutup.

LOCAL_CFLAGS = -Wno-unused-variable -g

-3
2018-05-28 22:13



export IGNORE_WARNINGS=1

Itu menampilkan peringatan, tetapi berlanjut dengan build


-3
2017-10-14 09:53