Bagikan melalui


Peringatan kompiler yang nonaktif secara default

Kompiler mendukung peringatan yang dinonaktifkan secara default, karena sebagian besar pengembang tidak menemukannya berguna. Dalam beberapa kasus, mereka memperingatkan tentang pilihan gaya, atau tentang idiom umum dalam kode yang lebih lama. Peringatan lainnya adalah tentang penggunaan ekstensi Microsoft ke bahasa tersebut. Beberapa peringatan menunjukkan area di mana programmer sering membuat asumsi yang salah, yang dapat menyebabkan perilaku yang tidak terduga atau tidak terdefinisi. Jika semua peringatan ini diaktifkan, beberapa di antaranya mungkin muncul berkali-kali di header pustaka. Pustaka runtime C dan pustaka standar C++ dimaksudkan untuk tidak mengeluarkan peringatan hanya pada tingkat /W4peringatan .

Aktifkan peringatan yang nonaktif secara default

Anda dapat mengaktifkan peringatan yang biasanya nonaktif secara default dengan menggunakan salah satu opsi berikut:

  • #pragma warning(default :warning_number)

    Peringatan yang ditentukan (warning_number) diaktifkan pada tingkat defaultnya. Dokumentasi untuk peringatan berisi tingkat default peringatan.

  • #pragma warning(:warning_number warning_level)

    Peringatan yang ditentukan (warning_number) diaktifkan pada tingkat yang ditentukan (warning_level).

  • /Wall

    /Wall mengaktifkan semua peringatan yang nonaktif secara default. Jika Anda menggunakan opsi ini, Anda dapat menonaktifkan peringatan individual dengan menggunakan opsi ./wd

  • /wLnnnn

    Opsi ini memungkinkan peringatan nnnn pada tingkat L.

Peringatan yang nonaktif secara default

Visual Studio 2015 dan versi yang lebih baru

Peringatan berikut dinonaktifkan secara default di Visual Studio 2015 dan versi yang lebih baru:

Peringatan Pesan
C4061 (tingkat 4) enumerator 'pengidentifikasi' dalam sakelar enum 'enumerasi' tidak ditangani secara eksplisit oleh label kasus.
C4062 (tingkat 4) enumerator 'pengidentifikasi' dalam sakelar enum 'enumerasi' tidak ditangani.
C4165 (tingkat 1) 'HRESULT' sedang dikonversi menjadi 'bool'; Apakah Anda yakin ini adalah apa yang Anda inginkan?
C4191 (tingkat 3) 'operator': konversi tidak aman dari 'type_of_expression' ke 'type_required'
C4242 (tingkat 4) 'pengidentifikasi': konversi dari 'type1' ke 'type2', kemungkinan hilangnya data
C4254 (tingkat 4) 'operator': konversi dari 'type1' ke 'type2', kemungkinan hilangnya data
C4255 (tingkat 4) 'function': no function prototype given: converting '()' to '(void)'
C4263 (tingkat 4) 'function': fungsi anggota tidak mengambil alih fungsi anggota virtual kelas dasar apa pun
C4264 (tingkat 1) 'virtual_function': tidak ada penimpaan yang tersedia untuk fungsi anggota virtual dari 'kelas' dasar; fungsi disembunyikan
C4265 (tingkat 3) 'class': class memiliki fungsi virtual, tetapi destruktor bukan virtual
C4266 (tingkat 4) 'function': no override available for virtual member function from base 'type'; function is hidden
C4287 (tingkat 3) 'operator': ketidakcocokan konstanta tidak bertanda/negatif
C4289 (tingkat 4) ekstensi nonstandar yang digunakan : 'var' : variabel kontrol perulangan yang dideklarasikan dalam for-loop digunakan di luar lingkup for-loop
C4296 (tingkat 4) 'operator': ekspresi selalu salah
C4339 (tingkat 4) 'type' : penggunaan jenis yang tidak terdefinisi yang terdeteksi dalam meta-data CLR - penggunaan jenis ini dapat menyebabkan pengecualian runtime
C4342 (tingkat 1) perubahan perilaku: 'fungsi' dipanggil, tetapi operator anggota dipanggil dalam versi sebelumnya
C4350 (tingkat 1) perubahan perilaku: 'member1' dipanggil alih-alih 'member2'
C4355 'ini' : digunakan dalam daftar inisialisasi anggota dasar
C4365 (tingkat 4) 'action': konversi dari 'type_1' ke 'type_2', ketidakcocokan yang ditandatangani/tidak ditandatangani
C4370 (tingkat 3) tata letak kelas telah berubah dari versi pengkompilasi sebelumnya karena pengemasan yang lebih baik
C4371 (tingkat 3) 'class-name': tata letak kelas mungkin telah berubah dari versi kompiler sebelumnya karena pengemasan anggota 'anggota' yang lebih baik
C4388 (tingkat 4) ketidakcocokan yang ditandatangani/tidak ditandatangani
C4412 (tingkat 2) 'function': tanda tangan fungsi berisi tipe 'type'; Objek C++ tidak aman untuk diteruskan antara kode murni dan campuran atau asli
C4426 (tingkat 1) bendera pengoptimalan berubah setelah menyertakan header, mungkin karena #pragma optimize() 14.1
C4435 (tingkat 4) 'class1' : Tata letak objek di bawah /vd2 akan berubah karena basis virtual 'class2'.
C4437 (tingkat 4) dynamic_cast dari 'class1' dasar virtual ke 'class2' dapat gagal dalam beberapa konteks.
C4444 (tingkat 3) '__unaligned' tingkat atas tidak diimplementasikan dalam konteks ini.
C4464 (tingkat 4) relative include path contains '..'
C4471 (tingkat 4) deklarasi maju dari enumerasi yang tidak terlingkup harus memiliki jenis yang mendasar (diasumsikan int) Perm
C4472 (tingkat 1) 'pengidentifikasi' adalah enum asli: tambahkan penentu akses (privat/publik) untuk mendeklarasikan enum terkelola
C4514 (tingkat 4) 'function': fungsi sebaris yang tidak direferensikan telah dihapus
C4536 (tingkat 4) 'type name': type-name melebihi batas meta-data karakter 'limit'
C4545 (tingkat 1) ekspresi sebelum koma mengevaluasi ke fungsi yang kehilangan daftar argumen
C4546 (tingkat 1) panggilan fungsi sebelum daftar argumen koma hilang
C4547 (tingkat 1) 'operator': operator sebelum koma tidak berpengaruh; operator yang diharapkan dengan efek samping
C4548 (tingkat 1) ekspresi sebelum koma tidak berpengaruh; ekspresi yang diharapkan dengan efek samping
C4549 (tingkat 1) 'operator1': operator sebelum koma tidak berpengaruh; apakah Anda berniat 'operator2'?
C4555 (tingkat 1) ekspresi tidak berpengaruh; ekspresi yang diharapkan dengan efek samping
C4557 (tingkat 3) '__assume' berisi efek 'efek'
C4571 (tingkat 4) informational: catch(...) semantik berubah sejak Visual C++ 7.1; pengecualian terstruktur (SEH) tidak lagi tertangkap
C4574 (tingkat 4) 'pengidentifikasi' didefinisikan sebagai '0': apakah Anda bermaksud menggunakan 'pengidentifikasi #if'?
C4577 (tingkat 1) 'noexcept' digunakan tanpa mode penanganan pengecualian yang ditentukan; penghentian pengecualian tidak dijamin. Menentukan /EHsc
C4582 (tingkat 4) 'type': konstruktor tidak secara implisit disebut
C4583 (tingkat 4) 'type': destructor tidak secara implisit disebut
C4587 (tingkat 1) 'anonymous_structure': perubahan perilaku: konstruktor tidak lagi secara implisit disebut
C4588 (tingkat 1) 'anonymous_structure': perubahan perilaku: destruktor tidak lagi secara implisit disebut
C4596 (tingkat 4) 'pengidentifikasi': nama ilegal yang memenuhi syarat dalam deklarasi anggota 14.3Perm
C4598 (tingkat 1 dan tingkat 3) '#include "header"': nomor header header-number di header yang telah dikomposisi sebelumnya tidak cocok dengan kompilasi saat ini pada posisi 14.3
C4599 (tingkat 3) 'jalur opsi': nomor argumen baris perintah arg_number tidak cocok dengan header yang telah dikompilasi sebelumnya 14.3
C4605 (tingkat 1) '/Dmakro' ditentukan pada baris perintah saat ini, tetapi tidak ditentukan ketika header yang telah dikompilasi dibuat sebelumnya
C4608 (tingkat 3) 'union_member' telah diinisialisasi oleh anggota serikat lain dalam daftar inisialisasi, 'union_member' Perm
C4619 (tingkat 3) #pragma peringatan: tidak ada nomor peringatan 'angka'
C4623 (tingkat 4) 'turunan kelas': konstruktor default tidak dapat dihasilkan karena konstruktor default kelas dasar tidak dapat diakses
C4625 (tingkat 4) 'turunan kelas': konstruktor salinan tidak dapat dihasilkan karena konstruktor salinan kelas dasar tidak dapat diakses
C4626 (tingkat 4) 'turunan kelas': operator penugasan tidak dapat dihasilkan karena operator penetapan kelas dasar tidak dapat diakses
C4628 (tingkat 1) digraph tidak didukung dengan -Ze. Urutan karakter 'digraph' tidak ditafsirkan sebagai token alternatif untuk 'char'
C4640 (tingkat 3) 'instance': konstruksi objek statis lokal tidak aman untuk utas
C4643 (tingkat 4) Penerusan yang menyatakan 'pengidentifikasi' di namespace std tidak diizinkan oleh Standar C++. 15.8
C4647 (tingkat 3) perubahan perilaku: __is_pod(jenis) memiliki nilai yang berbeda dalam versi sebelumnya
C4654 (tingkat 4) Kode yang ditempatkan sebelum menyertakan baris header yang telah dikompilasi sebelumnya akan diabaikan. Tambahkan kode ke header yang telah dikompilasi sebelumnya. 14.1
C4668 (tingkat 4) 'simbol' tidak didefinisikan sebagai makro praprosesor, mengganti dengan '0' untuk 'direktif'
C4682 (tingkat 4) 'simbol' : tidak ada atribut parameter arah yang ditentukan, default ke [in]
C4686 (tingkat 3) 'jenis yang ditentukan pengguna': kemungkinan perubahan perilaku, perubahan konvensi panggilan pengembalian UDT
C4692 (tingkat 1) 'function': tanda tangan anggota non-privat berisi jenis asli privat rakitan 'native_type'
C4710 (tingkat 4) 'function': function not inlined
C4738 (tingkat 3) menyimpan float 32-bit mengakibatkan memori, kemungkinan hilangnya performa
C4746 akses volatil 'ekspresi' tunduk pada pengaturan /volatile:<iso|ms> ; pertimbangkan untuk menggunakan fungsi intrinsik __iso_volatile_load/simpan
C4749 (tingkat 4) didukung secara kondisional: offsetof diterapkan ke jenis 'jenis' tata letak non-standar
C4767 (tingkat 4) nama bagian 'simbol' lebih panjang dari 8 karakter dan akan dipotong oleh linker
C4774 (tingkat 4) 'string' : format string yang diharapkan dalam nomor argumen bukan string literal
C4777 (tingkat 4) 'function' : format string 'string' memerlukan argumen jenis 'type1', tetapi nomor argumen variadik memiliki jenis 'type2'
C4786 (tingkat 3) 'simbol' : nama objek dipotong menjadi karakter 'angka' dalam informasi debug
C4800 (tingkat 4) Konversi implisit dari 'type' ke bool. Kemungkinan kehilangan informasi 16.0
C4820 (tingkat 4) Padding byte 'byte' ditambahkan setelah membangun 'member_name'
C4822 (tingkat 1) 'member': fungsi anggota kelas lokal tidak memiliki isi
C4826 (tingkat 2) Konversi dari 'type1' ke 'type2' diperpanjang. Ini dapat menyebabkan perilaku runtime tak terduga.
C4837 (tingkat 4) trigraf terdeteksi: '??karakter' digantikan oleh 'karakter'
C4841 (tingkat 4) ekstensi non-standar yang digunakan: penunjuk anggota campuran yang digunakan dalam offsetof
C4842 (tingkat 4) hasil 'offsetof' yang diterapkan ke jenis menggunakan beberapa warisan tidak dijamin konsisten antara rilis kompilator
C4866 (tingkat 4) Pengkompilasi 'file(nomor baris)' mungkin tidak memberlakukan urutan evaluasi kiri-ke-kanan untuk panggilan ke operator
C4868 (tingkat 4) Pengompilasi 'file(line_number)' mungkin tidak memberlakukan urutan evaluasi kiri-ke-kanan dalam daftar inisialisasi braced
C4905 (tingkat 1) string lebar literal cast ke 'LPSTR'
C4906 (tingkat 1) string literal cast ke 'LPWSTR'
C4917 (tingkat 1) 'deklarator': GUID hanya dapat dikaitkan dengan kelas, antarmuka, atau namespace
C4928 (tingkat 1) inisialisasi salinan ilegal; lebih dari satu konversi yang ditentukan pengguna telah diterapkan secara implisit
C4931 (tingkat 4) kami berasumsi pustaka jenis dibangun untuk pointer number-bit
C4946 (tingkat 1) reinterpret_cast digunakan antara kelas terkait: 'class1' dan 'class2'
C4962 'function': pengoptimalan yang dipandu profil dinonaktifkan karena pengoptimalan menyebabkan data profil menjadi tidak konsisten
C4986 (tingkat 4) 'simbol': spesifikasi pengecualian tidak cocok dengan deklarasi sebelumnya
C4987 (tingkat 4) ekstensi nonstandar yang digunakan: 'throw (...)'
C4988 (tingkat 4) 'simbol': variabel dideklarasikan di luar lingkup kelas/fungsi
C5022 'type': multiple move constructors specified
C5023 'type': beberapa operator penetapan pemindahan ditentukan
C5024 (tingkat 4) 'type': move constructor secara implisit didefinisikan sebagai dihapus
C5025 (tingkat 4) 'type': operator penetapan pemindahan secara implisit didefinisikan sebagai dihapus
C5026 (tingkat 1 dan tingkat 4) 'type': move constructor secara implisit didefinisikan sebagai dihapus
C5027 (tingkat 1 dan tingkat 4) 'type': operator penetapan pemindahan secara implisit didefinisikan sebagai dihapus
C5029 (tingkat 4) ekstensi nonstandar yang digunakan: atribut perataan di C++ berlaku untuk variabel, anggota data, dan jenis tag saja
C5031 (tingkat 4) #pragma peringatan(pop): kemungkinan tidak cocok, memunculkan status peringatan yang didorong dalam file yang berbeda 14.1
C5032 (tingkat 4) peringatan #pragma terdeteksi tanpa peringatan #pragma(pop) 14.1 yang sesuai

Visual Studio 2017 dan versi yang lebih baru

Peringatan berikut dinonaktifkan secara default di Visual Studio 2017 dan versi yang lebih baru:

Peringatan Pesan
C5034 penggunaan 'intrinsik' intrinsik menyebabkan fungsi-nama dikompilasi sebagai kode tamu 15.3
C5035 penggunaan fitur 'fitur' menyebabkan nama fungsi dikompilasi sebagai kode tamu 15.3
C5036 (tingkat 1) konversi penunjuk fungsi varargs saat mengkompilasi dengan /hybrid:x86arm64 'type1' ke 'type2' 15.3
C5038 (tingkat 4) anggota data 'member1' akan diinisialisasi setelah anggota data 'member2' 15.3
C5039 (tingkat 4) 'function': pointer atau referensi ke fungsi yang berpotensi melempar diteruskan ke fungsi C ekstern di bawah -EHc. Perilaku yang tidak terdefinisi dapat terjadi jika fungsi ini melemparkan pengecualian. 15.5
C5041 (tingkat 4) 'member-name': definisi di luar baris untuk anggota data statis constexpr tidak diperlukan dan tidak digunakan lagi di C++17. 15.2
C5042 (tingkat 3) 'function': deklarasi fungsi pada cakupan blok tidak dapat ditentukan 'sebaris' dalam C++; hapus penentu 'sebaris' 15.5
C5045 Compiler akan menyisipkan mitigasi Spectre untuk beban memori jika /Qspectre switch ditentukan 15.7

Visual Studio 2019 dan versi yang lebih baru

Peringatan berikut dinonaktifkan secara default di Visual Studio 2019 dan versi yang lebih baru:

Peringatan Pesan
C5052 (tingkat 3) Kata kunci 'kata kunci-nama' diperkenalkan dalam versi C++ dan memerlukan penggunaan opsi baris perintah 'opsi' 16.1
C5204 (tingkat 3) Kelas dengan fungsi virtual memiliki destruktor sepele non-virtual. 16.5
C5214 (tingkat 4) menerapkan 'kata kunci' ke operand dengan jenis yang memenuhi syarat volatil tidak digunakan lagi dalam C++20 16.7
C5215 (tingkat 4) 'parameter fungsi' parameter fungsi dengan jenis yang memenuhi syarat volatil tidak digunakan lagi di C++20 16.7
C5216 (tingkat 4) 'return-type' jenis pengembalian yang memenuhi syarat volatil tidak digunakan lagi di C++20 16.7
C5217 (tingkat 4) deklarasi pengikatan terstruktur yang mencakup volatile tidak digunakan lagi dalam C++20 16.7
C5219 (tingkat 2) konversi implisit dari 'type-1' ke 'type-2', kemungkinan hilangnya data 16.7
C5220 (tingkat 4) 'member': anggota data non-statis dengan jenis yang memenuhi syarat volatil tidak lagi menyiratkan bahwa
konstruktor salinan/pemindahan yang dihasilkan kompilator dan operator penugasan salin/pindah tidak sepele 16,7
C5233 (tingkat 4) 'Pengidentifikasi' penangkapan lambda eksplisit tidak digunakan 16.10
C5240 (tingkat 4) 'attribute-name': atribut diabaikan dalam posisi syntactic 16.10 ini
C5243 (tingkat 1) 'type-name': menggunakan kelas 'class-name' yang tidak lengkap dapat menyebabkan potensi pelanggaran aturan definisi karena batasan ABI 16.10
C5245 (tingkat 4) 'function': fungsi tidak direferensikan dengan tautan internal telah dihapus
C5246 (tingkat 1) 'member': inisialisasi subobjek harus dibungkus dengan kurung kurawal 16.10
C5247 (tingkat 1) Bagian 'section-name' dicadangkan untuk inisialisasi dinamis C++. Membuat bagian secara manual akan mengganggu inisialisasi dinamis C++ dan dapat menyebabkan perilaku yang tidak ditentukan 16.11
C5248 (tingkat 1) Bagian 'section-name' dicadangkan untuk inisialisasi dinamis C++. Variabel yang dimasukkan secara manual ke bagian dapat dioptimalkan dan urutannya relatif terhadap pengkompilasi yang dihasilkan penginisialisasi dinamis tidak ditentukan 16.11

Visual Studio 2022 dan versi yang lebih baru

Peringatan berikut dinonaktifkan secara default di Visual Studio 2022 dan versi yang lebih baru:

Peringatan Pesan
C5249 (tingkat 1) 'bitfield' tipe 'enumeration_name' memiliki enumerator bernama dengan nilai yang tidak dapat diwakili dalam lebar bidang bit yang diberikan dari 'bitfield_width'. 17.0
C5250 (tingkat 3) 'function_name': fungsi intrinsik tidak dideklarasikan. 17.0
C5251 (tingkat 4) nama segmen berubah setelah menyertakan header 17.1
C5254 (tingkat 4) fitur bahasa 'pernyataan statis terse' memerlukan bendera kompilator '/std:c++17' 17.1
C5256 (tingkat 1) 'enumerasi': deklarasi enumerasi yang tidak mendefinisikan dengan jenis yang mendasar tetap hanya diizinkan sebagai deklarasi mandiri 17.2
C5258 (tingkat 4) pengambilan eksplisit 'simbol' tidak diperlukan untuk penggunaan ini 17.2
C5259 (tingkat 4) 'specialized-type': spesialisasi eksplisit memerlukan 'template <>' 17.3
C5262 (tingkat 1, kesalahan) fall-through implisit terjadi di sini; Apakah Anda kehilangan pernyataan break ? Gunakan [[fallthrough]] saat break pernyataan sengaja dihilangkan antara kasus 17.4
C5263 (tingkat 4) memanggil 'std::move' pada objek sementara mencegah penyalinan elisi 17.4
C5264 (tingkat 4) 'variable-name': variabel 'const' tidak digunakan 17.4
C5266 (tingkat 4) Kualifikasi 'const' pada jenis pengembalian tidak berpengaruh pada 17.6
C5267 (tingkat 4) definisi operator konstruktor/penugasan salinan implisit untuk 'jenis' tidak digunakan lagi karena memiliki operator penugasan yang disediakan pengguna/konstruktor salinan 17.7

14.1 Peringatan ini tersedia mulai dari Visual Studio 2015 Update 1.
14.3 Peringatan ini tersedia mulai dari Visual Studio 2015 Update 3.
15.2 Peringatan ini tersedia mulai dari Visual Studio 2017 versi 15.2.
15.3 Peringatan ini tersedia mulai dari Visual Studio 2017 versi 15.3.
15.5 Peringatan ini tersedia mulai di Visual Studio 2017 versi 15.5.
15.7 Peringatan ini tersedia mulai di Visual Studio 2017 versi 15.7.
15.8 Peringatan ini tersedia mulai di Visual Studio 2017 versi 15.8.
16.0 Peringatan ini tersedia mulai di Visual Studio 2019 RTM.
16.5 Peringatan ini tersedia mulai di Visual Studio 2019 versi 16.5.
16.7 Peringatan ini tersedia mulai di Visual Studio 2019 versi 16.7.
16.10 Peringatan ini tersedia mulai di Visual Studio 2019 versi 16.10.
16.11 Peringatan ini tersedia mulai di Visual Studio 2019 versi 16.11.
17.0 Peringatan ini tersedia mulai visual Studio 2022 versi 17.0.
17.1 Peringatan ini tersedia mulai di Visual Studio 2022 versi 17.1.
17.2 Peringatan ini tersedia mulai visual Studio 2022 versi 17.2.
17.3 Peringatan ini tersedia mulai di Visual Studio 2022 versi 17.3.
17.4 Peringatan ini tersedia mulai visual Studio 2022 versi 17.4.
17.5 Peringatan ini tersedia mulai visual Studio 2022 versi 17.5.
17.6 Peringatan ini tersedia mulai visual Studio 2022 versi 17.6.
17.7 Peringatan ini tersedia mulai visual Studio 2022 versi 17.7.
Perm Peringatan ini nonaktif kecuali /permissive- opsi pengkompilasi diatur.

Peringatan nonaktif secara default dalam versi yang lebih lama

Peringatan ini nonaktif secara default di Visual Studio 2015 versi 15.3, dan diaktifkan di Visual Studio 2015 versi 15.5:

Peringatan Pesan
C4768 __declspec atribut sebelum spesifikasi tautan diabaikan

Peringatan ini nonaktif secara default dalam versi pengkompilasi sebelum Visual Studio 2015:

Peringatan Pesan
C4302 (tingkat 2) 'konversi': pemotongan dari 'type1' ke 'type2'
C4311 (tingkat 1) 'variabel': pemotongan pointer dari 'type' ke 'type'
C4312 (tingkat 1) 'operation': konversi dari 'type1' ke 'type2' dengan ukuran yang lebih besar
C4319 (tingkat 1) 'operator': nol memperluas 'type1' ke 'type2' dengan ukuran yang lebih besar

Peringatan ini nonaktif secara default dalam versi pengkompilasi sebelum Visual Studio 2012:

Peringatan Pesan
C4431 (tingkat 4) penentu tipe hilang - int diasumsikan. Catatan: C tidak lagi mendukung default-int

Baca juga

warning pragma