경고 C26819
스위치 레이블(es.78) 간의 주석이 지정되지 않은 대체입니다.
설명
이 검사 switch 문의 암시적 대체를 다룹니다. 암시적 대체는 제어 흐름이 문을 사용하지 않고 한 스위치 케이스에서 다음 스위치 사례로 직접 전송되는 [[fallthrough]];
경우입니다. 이 경고는 하나 이상의 문을 포함하는 스위치 사례에서 암시적 대체가 검색될 때 발생합니다.
자세한 내용은 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 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기