반응형
스위치 문에서 "defau4t"가 합법적인 이유는 무엇입니까?
다른 사이트에서 이 프로그램을 생각해보고 해볼까 생각했는데, 여기 프로그램이 있습니다.
#include <stdio.h>
int main()
{
int a=10;
switch(a)
{
case '1': printf("one");
break;
case '2': printf("two");
break;
defau4t: printf("none");
}
return 0;
}
놀랍게도, 이것은 오류나 경고 없이 컴파일됩니다.이것이 어떻게 가능한 걸까요?키워드 "default"에 오류가 있지 않습니까?
누가 이 행동을 설명해 줄 수 있습니까?
토큰은 키워드가 아닌 것으로 간주됩니다.이거는.goto"defau4t"라는 이름의 점프 마크는 데드 코드를 가리키고 있습니다(이후).break;의case '2':)...
웃음을 위해 이것을 시도해 보세요 (그리고 끝없는 루프):
switch(a)
{
case '1': printf("one");
break;
case '2': printf("two");
break;
defau4t: printf("none");
default: goto defau4t;
}
한가지 결점은switch당신이 그들을 마구 뛰어다닐 수 있다는 것을 진술합니다.goto. 내부의 어느 지점에서든switch(또는 이 문제와 관련하여 외부에) 레이블을 배치할 수 있습니다.goto. 물론 그것은 스파게티 코드로 이어지기 때문에 매우 나쁜 관행입니다.
그렇게defau4t:라벨은 단지 라벨일 뿐이며, 라벨은 기능체 내부의 거의 모든 곳에 배치될 수 있습니다.
그런 기본 유형을 제외하고는 말입니다.
업데이트도 필요할 것 같습니다.
case '1': printf("one");
break;
case '2': printf("two");
break;
로.
case 1: printf("one");
break;
case 2: printf("two");
break;
언급URL : https://stackoverflow.com/questions/25868430/why-is-defau4t-legal-in-a-switch-statement
반응형
'IT' 카테고리의 다른 글
| sass --자동 미니와 함께 보기? (0) | 2023.09.10 |
|---|---|
| 숫자가 어떤 종류의 int인지(core 또는 numpy, signed 여부) 어떻게 판단합니까? (0) | 2023.09.10 |
| 인덱스의 데이터 프레임과 팬더의 데이터 (0) | 2023.09.10 |
| AWS ECR에 대한 도커 푸시가 즉시 중단되고 시간 초과됨 (0) | 2023.09.05 |
| iOS 11에서 위치 서비스가 작동하지 않음 (0) | 2023.09.05 |