MSDN 설명

식별자에 의해 지정된 레이블 문은 현재 함수에 있어야 합니다. 모든 식별자 이름은 내부 네임스페이스의 멤버이므로 다른 식별자를 방해하지 않습니다.

문 레이블은에 의미가 goto 문과 그렇지 않은 경우 문 레이블은 무시 됩니다. 레이블을 다시 선언할 수 없습니다.

goto 해당 위치에 대 한 범위 내에 있는 모든 변수를 초기화 하는 메서드는 위치에 컨트롤을 전송 하는 문은 허용 되지 않습니다. 

라고한다.

쉽게 말하면 그냥 내가 지정한 위치로 점프해버리는 제어문이다.

점프하고 싶은 곳에 comeback의 이름을가진 레이블을 만들고 goto comeback 을 하면 comeback 레이블이 있는곳으로 점프한다.

아래 코드를 보자

코드

#include <iostream>

int main()
{
	int x;
comeback :
	std::cout << "5이상 숫자 입력해" << std::endl;
	std::cin >> x;
	if (x < 5)
	{
		std::cout << "??????????????? ";
		std::cout << x;
		std::cout << " 5이상 이요!" << std::endl;
		goto comeback;
		std::cout << "이것도 출력해 보시지!" << std::endl;
	}
	else
	{
		std::cout << x << std::endl;
	}
	return 0;
}

결과

5이하의 숫자를 입력할때 comeback:의 위치로 점프해서 계속 반복하다가 5를 넣자 프로그램이 종료되었다!

goto 문 때문에 위로 다시 점프를 하기 때문에 이것도 출력해 보시지! 라는 문자는 출력되지 않는다.

지금은 레이블을 1개밖에 사용하지 않아서 편리해 보이지만.. 만약 레이블이 50개 100개 늘어난다고하면 어떻게 될까

엄청 얽혀 있고 프로그래머는 코드의 흐름을 이해하기 힘들어진다. 이런 코드를 스파게티 코드라고 하는데.

관리하기 어려운 코드가 된다는것이다. 그래서 C++에서는 잘 사용하지 않는다고 들었다!!

물론 사람마다 차이가 있기때문에 자주 사용하시는 분들도 있을것이다!

'게임 프로그래밍 > C++ 기초' 카테고리의 다른 글

C++ 바이트패딩 Byte Padding (두번째!)  (4) 2020.05.13
C++ void* 보이드 포인터  (0) 2020.05.11
C++ 함수 포인터  (0) 2020.05.05
C++ 가변 인자 템플릿  (0) 2020.05.05
C++ 가변인자  (1) 2020.05.03

+ Recent posts