Uyarı C26819
Anahtar etiketleri (es.78) arasındaki açıklamasız geçiş.
Açıklamalar
Bu denetim switch deyimlerindeki örtük fallthrough'u kapsar. Örtük olarak, denetim akışı deyimi kullanılmadan [[fallthrough]];
bir anahtar durumundan doğrudan aşağıdaki anahtar durumuna aktarılır. Bu uyarı, en az bir deyim içeren bir anahtar durumunda örtük bir fallthrough algılandığında tetiklenir.
Daha fazla bilgi için bkz. ES.78: C++ Temel Yönergeleri'ndeki deyimlerde switch
örtük hataya güvenmeyin.
Örnek
Bu örnekte, örtük bir fallthrough bir nonempty switch
case
'den aşağıdakine case
gerçekleşir.
void fn1();
void fn2();
void foo(int a)
{
switch (a)
{
case 0: // implicit fallthrough from case 0 to case 1 is OK because case 0 is empty
case 1:
fn1(); // implicit fallthrough from case 1 into case 2
case 2: // Warning C26819.
fn2();
break;
default:
break;
}
}
Bu sorunu düzeltmek için, fallthrough oluştuğu bir deyimi ekleyin [[fallthrough]];
.
void fn1();
void fn2();
void foo(int a)
{
switch (a)
{
case 0:
case 1:
fn1();
[[fallthrough]]; // fallthrough is explicit
case 2:
fn2();
break;
default:
break;
}
}
Sorunu düzeltmenin bir diğer yolu da örtük fallthrough'u kaldırmaktır.
void fn1();
void fn2();
void foo(int a)
{
switch (a)
{
case 0:
case 1:
fn1();
break; // case 1 no longer falls through into case 2
case 2:
fn2();
break;
default:
break;
}
}