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 switchcase 'den aşağıdakine casegerç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;
    }
}

Ayrıca bkz.

ES.78: Deyimlerde örtük fallthrough'a switch güvenmeyin