[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;
}
'분류대기' 카테고리의 다른 글
[C++] struct byte align (0) | 2024.12.26 |
---|---|
swagger-editor 설치 (0) | 2024.06.12 |
CUDA 설치하기, [윈도우, 리눅스] (0) | 2024.05.14 |
[내용 채워야 됨] CUDA 사용해보기 (0) | 2024.02.22 |
[좀 더 작성, 콜 스택 부분] Windows, c++, CallStack (0) | 2023.12.20 |