Bagikan melalui


Peringatan kompilator (tingkat 1, kesalahan, nonaktif) C5262

fall-through implisit terjadi di sini; Apakah Anda kehilangan pernyataan break ? Gunakan [[fallthrough]] saat break 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

switch pernyataan (C++)
[[fallthrough]] atribut