레이블은 진술의 일부만 될 수 있으며 선언은 진술이 아닙니다.
- 레이블은 명령문의 일부만 될 수 있고 선언은 명령문이 아님 C의 오류
-
C에서
switch
문을 사용할 때 레이블은 문의 일부만 될 수 있으며 선언은 문 오류가 아닙니다. - a 레이블을 피하는 방법은 명령문의 일부만 될 수 있으며 C에서 선언은 명령문 오류가 아닙니다.
- 결론
프로그래밍 언어로 프로그래밍하는 동안 오류가 발생하여 프로그램이 비정상적으로 작동하거나 오류가 해결될 때까지 프로그램이 중단됩니다. 이 기사에서는 C 언어에서만 발생하는 레이블은 명령문의 일부일 수 있고 선언은 명령문이 아닙니다
라는 오류에 대해 설명합니다.
레이블은 명령문의 일부만 될 수 있고 선언은 명령문이 아님 C의 오류
오류는 프로그램의 비정상적 작동을 초래하는 프로그래머에 의한 예상치 못한 상황이나 불법적인 행동입니다. 이러한 오류는 그 영향에 따라 다양한 유형이 있습니다.
그러나 일부 오류는 모든 프로그래밍 언어에서 공통적이지 않고 특정 언어에서만 발생합니다. 이러한 오류 중 하나는 C 언어에서만 발생하는 레이블은 명령문의 일부일 수 있고 선언은 명령문이 아닙니다
입니다.
이 오류는 레이블 바로 다음에 선언이 올 때 발생합니다. 그러나 C 언어 표준에서는 선언이 아닌 레이블 뒤에만 문을 허용합니다.
C 언어의 레이블은 소스 코드의 특정 위치를 나타내는 일련의 문자입니다. 레이블은 프로그램에서 goto
문과 함께 사용됩니다.
아래 코드와 같이 사용됩니다.
#include <stdio.h>
int main() {
goto TARGET;
TARGET:
printf("Hello World");
return 0;
}
출력:
Hello World
goto
문에 도달할 때마다 프로그램 제어는 프로그램의 지정된 레이블로 이동합니다. 위의 프로그램에서 볼 수 있듯이 TARGET
레이블 뒤에 printf
문이 있기 때문에 출력이 성공적으로 인쇄됩니다.
그러나 레이블 뒤에 변수를 선언하려고 하면 C 언어 표준에서 레이블 바로 뒤에 선언을 허용하지 않기 때문에 동일한 코드에서 오류가 발생합니다. 따라서 프로그램은 레이블은 명령문의 일부일 수 있으며 선언은 명령문이 아닙니다
오류를 발생시킵니다.
이러한 오류가 발생하는 예를 살펴보겠습니다.
#include <stdio.h>
int main() {
goto TARGET;
TARGET:
char* s = "Hello World";
printf("%s", s);
return 0;
}
출력:
.ex1.c: In function 'main':
.ex1.c:7:5: error: a label can only be part of a statement and a declaration is not a statement
char * s = "Hello World";
^
출력에 표시된 것처럼 레이블은 명령문의 일부일 수 있으며 선언은 명령문이 아닙니다.
라는 오류가 언급됩니다. 또한 TARGET
레이블 뒤의 선언문인 지정된 문제 라인도 표시되었습니다.
그러나 선언이 레이블 바로 뒤에 오지 않았다면 프로그램은 제대로 작동했을 것입니다. 그 예도 살펴보자.
#include <stdio.h>
int main() {
goto TARGET;
TARGET:
printf("%d", 2 + 5);
char* s = "Hello World";
printf("%s", s);
return 0;
}
출력:
7Hello World
따라서 레이블은 명령문의 일부일 수 있으며 선언은 명령문이 아닙니다
라는 오류는 선언이 프로그램의 레이블 바로 뒤에 오는 경우에만 발생합니다. 레이블과 선언 뒤에 printf
문을 추가했을 때 오류가 발생하지 않았습니다.
C에서 switch
문을 사용할 때 레이블은 문의 일부만 될 수 있으며 선언은 문 오류가 아닙니다.
C에서 switch
문을 사용할 때 레이블은 명령문의 일부일 수 있고 선언은 명령문이 아닙니다
라는 오류도 발생합니다. 이는 C 언어에서 케이스를 레이블과 유사하게 취급하기 때문입니다.
따라서 사례 직후에 무언가를 선언하려고 할 때마다 레이블은 명령문의 일부일 수 있으며 선언은 명령문이 아닙니다
라는 오류가 사용자에게 발생합니다.
동일한 예를 살펴보겠습니다.
#include <stdio.h>
int main() {
char ch = 'A';
switch (ch) {
case 'A':
char* s = "Case A";
printf("%s", s);
break;
}
}
출력:
.ex1.c: In function 'main':
.ex1.c:8:7: error: a label can only be part of a statement and a declaration is not a statement
char * s = "Case A";
^
따라서 위 출력에서 볼 수 있듯이 case A
바로 뒤에 변수 s
를 선언하려고 할 때 C에서 switch 문을 사용할 때 동일한 오류가 발생했습니다.
a 레이블을 피하는 방법은 명령문의 일부만 될 수 있으며 C에서 선언은 명령문 오류가 아닙니다.
이제 레이블은 명령문의 일부일 수 있고 선언은 명령문이 아닙니다
라는 오류를 어떻게 해결할 수 있는지 논의할 것입니다.
레이블 뒤에 세미콜론을 넣기만 하면 이 오류를 방지할 수 있습니다. 컴파일러는 세미콜론을 빈 문으로 처리하고 오류를 발생시키지 않습니다.
예제를 통해 위의 솔루션을 살펴보겠습니다.
#include <stdio.h>
int main() {
goto TARGET;
TARGET:;
char* s = "Hello World";
printf("%s", s);
return 0;
}
출력:
Hello World
이제 위의 코드에서 TARGET
레이블 뒤에 세미콜론을 추가하여 레이블 바로 뒤에 변수 s
를 선언할 수 있음을 알 수 있습니다. 레이블은 명령문의 일부일 수 있으며 선언은 명령문이 아닙니다
라는 오류를 발생시키지 않습니다.
앞에서 설명한 것처럼 cases
는 C 언어의 레이블과 유사한 것으로 간주되기 때문에 switch
문을 처리하는 동안에도 동일한 오류가 발생합니다.
따라서 switch
문의 오류를 해결하려면 case
뒤에 세미콜론을 추가하거나 switch
문의 case
블록 주위에 중괄호를 둘 수 있습니다. 어느 쪽이든 우리의 오류를 해결할 것입니다.
case
뒤에 세미콜론이 있는 코드를 살펴보겠습니다.
#include <stdio.h>
int main() {
char ch = 'A';
switch (ch) {
case 'A':;
char* s = "Case A";
printf("%s", s);
break;
}
}
출력:
Case A
따라서 보시다시피 세미콜론만 추가하면 레이블은 명령문의 일부일 수 있으며 선언은 명령문이 아닙니다
오류가 해결됩니다.
이제 레이블 블록 주위에 중괄호 쌍을 추가하여 오류를 해결해 보겠습니다.
#include <stdio.h>
int main() {
char ch = 'A';
switch (ch) {
case 'A': {
char* s = "Case A";
printf("%s", s);
break;
}
}
}
출력:
Case A
case A
의 문장 주위에 중괄호 쌍을 추가하여 오류를 해결했습니다.
결론
이 기사에서는 레이블은 명령문의 일부일 수 있으며 선언은 명령문이 아닙니다
오류에 대해 자세히 논의했습니다. C 언어 표준은 레이블 뒤의 명령문만 허용하며 오류를 발생시키는 레이블 바로 뒤의 선언은 허용하지 않습니다.
이 오류를 해결하기 위해 C에서 switch
문의 case
에서 레이블 뒤에 세미콜론을 사용하고 레이블 블록 주위에 한 쌍의 중괄호를 사용할 수 있습니다.