警告 C26819
切換標籤 (es.78) 之間的未標注後置。
備註
這項檢查涵蓋 switch 語句中的隱含遞補。 隱含的遞補是當控制流程從一個交換器案例直接傳輸至下列參數案例時,而不需要使用 [[fallthrough]];
語句。 當在包含至少一個語句的 switch 案例中偵測到隱含的遞補時,就會引發這個警告。
如需詳細資訊,請參閱 ES.78:不要依賴 C++ 核心指導方針中語句 中的 switch
隱含後置。
範例
在此範例中,隱含的遞補會從非空白 switch
case
到下列 case
。
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;
}
}
若要修正此問題,請插入 [[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;
}
}
修正問題的另一種方法是移除隱含的遞補。
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;
}
}
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應