Peringatan kompilator (tingkat 1, kesalahan, nonaktif) C5262
fall-through implisit terjadi di sini; Apakah Anda kehilangan pernyataan
break
? Gunakan[[fallthrough]]
saatbreak
pernyataan sengaja dihilangkan di antara kasus
Keterangan
Alur kontrol yang secara implisit berada di antara kasus pernyataan pengalihan adalah sumber historis bug untuk C dan C++. Meskipun kami memiliki __fallthrough
makro SAL, itu tidak berguna untuk diagnostik build-compiler. Karena pelanggan memiliki kode warisan yang "jatuh melalui" dengan sengaja, tidak layak untuk memberikan peringatan yang dapat ditindaklanjuti tanpa beberapa cara menunjukkan kejatuhan yang disengaja. Di C++17, [[fallthrough]]
atribut ditambahkan untuk menunjukkan instans seperti itu. Pengompilasi dapat memperhitungkan atribut ini dan menekan peringatan baru.
Peringatan compiler C5262 baru di Visual Studio 2022 versi 17.4, dan keduanya nonaktif secara default dan diperlakukan sebagai kesalahan secara default saat diaktifkan. Untuk terus mendukung kode warisan tanpa hentian build, C5262 harus diaktifkan secara eksplisit. Untuk informasi selengkapnya tentang cara mengaktifkan peringatan ini, lihat Peringatan pengkompilasi yang nonaktif secara default.
Contoh
Kode sampel menunjukkan diagnostik untuk switch
kasus yang jatuh tanpa break
pernyataan atau return
atau [[fallthrough]]
atribut .
// C5262.cpp
// compile using /std:c++17 /we5262
int main(int argc, char** argv)
{
switch (argc)
{
case 0: ++argv;
case 1:
case 2: argv++;
default:
argv = 0;
}
}
/*
When built, the compiler produces this output:
.\C5262.cpp(9,9): error C5262: implicit fall-through occurs here; are you missing a break statement? Use [[fallthrough]] when a break statement is intentionally omitted between cases
case 1:
^
.\C5262.cpp(8,17): note: statement that may fall through is here
case 0: ++argv;
^
.\C5262.cpp(11,9): error C5262: implicit fall-through occurs here; are you missing a break statement? Use [[fallthrough]] when a break statement is intentionally omitted between cases
default:
^
.\C5262.cpp(10,17): note: statement that may fall through is here
case 2: argv++;
*/
Untuk mengatasi masalah ini ketika alur kontrol antar kasus disengaja, gunakan [[fallthrough]]
atribut .
Baca juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk