분류대기
[리눅스] goto 사용 시 컴파일
jdaemanv2
2025. 1. 14. 22:01
[1. 개요]
c++ 코드 작성 시, goto 문이 필요한 경우
- 동일한 코드라도 컴파일러 종류에 따라서 컴파일이 될 수도 있고 안될 수 있다.
- 윈도우 msvc 컴파일러는 허용 폭이 관대한 편이고,
- 리눅스 g++ 컴파일러는 굉장히 타이트 한 편인 것 같다.
[2. 예제]
아래 코드는 리눅스에서 컴파일이 안된다.
#include <iostream>
int main(int argc, char **argv)
{
if (argc == 1) {
goto EXIT;
}
int a=3;
int b=4;
std::cout << a << " " << b << std::endl;
EXIT:
return 0;
}
- error: jump to label ‘EXIT' 이라는 에러가 발생.
- 원인은 변수의 선언이 goto 문과 와 goto 할 label 사이에 있기 때문이다.
- c 코드는 변수를 항상 지역의 제일 첫번째에 와야 하지만,
- c++ 코드는 이러한 규칙을 지킬 필요가 없다.
- 따라서 아래와 같이 goto ~ label 사이의 변수 선언을 하지 않으면 컴파일이 된다.
#include <iostream>
int main(int argc, char **argv)
{
int a=3;
int b=4;
if (argc == 1) {
goto EXIT;
}
std::cout << a << " " << b << std::endl;
EXIT:
return 0;
}