Derleyici uyarısı (düzey 1, hata, kapalı) C5262
örtük düşüş burada gerçekleşir; bir
break
ifadeniz eksik mi? Durumlar arasında birbreak
deyim kasıtlı olarak atlandığında kullanın[[fallthrough]]
Açıklamalar
Anahtar deyimleri durumları arasında örtük olarak yer alan denetim akışı, hem C hem de C++ için hataların geçmiş kaynağıdır. SAL makromuz __fallthrough
olsa da derleme derleyicisi tanılaması için kullanışlı değildi. Müşteriler kasıtlı olarak "geçen" eski kodlara sahip olduğundan, kasıtlı bir düşüşü belirtmeden eyleme dönüştürülebilir bir uyarı vermek uygun değildir. C++17'de, [[fallthrough]]
böyle bir örneği göstermek için özniteliği eklendi. Derleyici bu özniteliği hesaba katabilir ve yeni uyarıyı gizler.
Derleyici uyarısı C5262, Visual Studio 2022 sürüm 17.4'te yenidir ve hem varsayılan olarak kapalıdır hem de etkinleştirildiğinde varsayılan olarak hata olarak değerlendirilir. Derleme sonları olmadan eski kodu desteklemeye devam etmek için C5262'nin açıkça etkinleştirilmesi gerekir. Bu uyarıyı etkinleştirme hakkında daha fazla bilgi için bkz . Varsayılan olarak kapalı olan derleyici uyarıları.
Örnek
Örnek kod, veya deyimleri veya return
[[fallthrough]]
özniteliği olmadan break
geçen durumlar için switch
tanılamayı gösterir.
// 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++;
*/
Servis talepleri arasındaki denetim akışı kasıtlı olduğunda bu sorunu çözmek için özniteliğini [[fallthrough]]
kullanın.