switch 문 안에 변수 선언하기
이 질문에는 이미 답변이 있습니다.
이 문제에 대한 몇 가지 답변을 보았는데 문제가 switch
있습니다. 내부에서 변수를 선언하고 할당 할 수 없습니다 . 그러나 오류가 발생하면 다음이 올바른지 궁금합니다.
오류 : 'int'앞의 예상 표현식
암호:
switch (i) {
case 0:
int j = 1;
break;
}
전화를 걸기 NSLog()
전에 왜 오류가 발생하지 않습니까?
switch (i) {
case 0:
NSLog(@"wtf");
int j = 1;
break;
}
언어의 구문에 따라 스위치 내에서 실제로 변수 를 선언 할 수 있습니다. " case 0:
"은 (는) 레이블 이므로 오류가 발생합니다 . C에서 레이블 다음에 첫 번째 명령문 으로 선언 하는 것은 불법 입니다. 컴파일러는 메소드 호출, 정규 할당 등과 같은 표현식을 기대합니다 . 기괴하지만 그것이 규칙입니다.)
NSLog ()를 먼저 넣을 때이 제한을 피했습니다. 범위의 블록을 소개하기 위해 케이스의 내용을 {} 중괄호로 묶거나 변수 선언을 스위치 외부로 옮길 수 있습니다. 당신이 선택하는 것은 개인적인 취향의 문제입니다. {} 중괄호로 선언 된 변수는 해당 범위 내에서만 유효하므로이를 사용하는 다른 코드도 해당 중괄호 안에 나타나야합니다.
편집하다:
그건 그렇고,이 기발한 생각은 당신이 생각하는 것만 큼 드문 일이 아닙니다. C와 Java에서는 for , while 또는 do 루프에서 또는 if 및 else 절 에서 로컬 변수 선언을 단독 명령문 ( "괄호로 묶지 않음"으로)을 사용하는 것도 불법 입니다. 의 퍼즐 # 55에 포함 "자바 퍼즐 러 (Puzzler)" 나는 매우 추천한다.) 우리가 일반적으로 그러한 상황에서 유일한 문으로 변수를 선언하는 거의 의미가 있기 때문에 함께 시작합니다.와 같은 오류를 쓰지 않는다 생각 스위치를 / 그러나 사례 구조는 일부 사람들은 휴식 이후에 중괄호를 생략합니다. statement는 제어 흐름에 중요한 문입니다.
컴파일러 던지기를 보려면이 끔찍하고 무의미한 스 니펫을 (Objective-) C 코드에 복사하십시오.
if (1)
int i;
else
int i;
for (int answer = 1; answer <= 42; answer ++)
int i;
while (1)
int i;
do
int i;
while (1);
또 다른 이유는 항상 {} 중괄호를 사용하여 이러한 구문의 본문을 구분하는 것입니다. :-)
전에이 문제에 부딪 쳤으며 결론은 코드를 블록 안에 넣는 것입니다.
switch (i) {
case 0:
{
int j = 1;
break;
}
}
내가 사용하는 또 다른 간단한 해결 방법은 선언 전에 빈 식 (세미콜론)을 추가하는 것입니다. 이렇게하면 변수 범위가 코드 블록으로 제한되는 것을 피할 수 있습니다 (또는 코드 블록이 있거나없는 경우도 있습니다.
switch (i) {
case 0:;
int j = 1;
break;
}
참고 URL : https://stackoverflow.com/questions/1231198/declaring-variables-inside-a-switch-statement
'development' 카테고리의 다른 글
Node.js가 지원하는 인코딩 목록 (0) | 2020.07.26 |
---|---|
Await Promise.all ()과 다중 대기의 차이점은 무엇입니까? (0) | 2020.07.26 |
트위터 부트 스트랩의 탐색 모음 색상 (0) | 2020.07.26 |
기본적으로 Vim 구문 강조 표시 사용 (0) | 2020.07.26 |
app-debug.apk와 app-debug-unaligned.apk의 차이점 (0) | 2020.07.26 |