본문 바로가기

goto 문 goto statement 본문

💘 C++/흐름제어

goto 문 goto statement

Hyonii 2022. 4. 25. 18:13

goto 문

어딘가로 가라는 의미

goto 문은 CPU가 코드의 다른 지점으로 점프하도록 하는 제어 흐름 명령문이다.

점프하는 지점은 문 라벨(statement label) : 을 사용하여 식별된다.


[EX 1] 숫자를 입력받고 그 숫자의 square route를 계산하는 예제

double로 x를 입력 받고

음수가 아닌 숫자를 입력하라고 경고문을 띄워준다

 

x가 0보다 작으면 문제가 된다고 가정하고 이를 방지하기 위해 쓸 수 있는 방법에는 여러가지가 있다. (if 문 등)

여기서 goto 문을 써보면

 

goto문은 위치를 책갈피처럼 지정을 해 줄 수 있다. 그것을 레이블이라고 부름(책갈피라고 생각해라) 이름은 자기 맘대로

goto tryAgain 하면 위에 tryAgain이 있는 곳으로 간다.

 

4.0을 입력해보면

 

2의 제곱이 4니까 잘 나온 것을 확인 할 수 있다.

 

-4.0을 입력해보면

 

-4.0은 0보다 작으니까 다시 tryAgain 이 있는 곳으로 간다.

다시 입력하라고 경고가 뜬다.

음수가 아닌 숫자를 입력할 때 까지 무한반복을 한다.

 

옛날에는 for문, while 문 대신 goto를 많이 썻다.

어떻게 보면 goto가 반복문의 원조급.

goto 문은 약간 은퇴 할 때가 되었는데 아직 남아있는 느낌.


[EX 2] 주의해야 할 경우

만약 이런 프로그램이 있다면 실행이될까?

 

goto에서 skip을 해버리면 x가 실제로 선언이되고 초기화 될 여지가 없어진다.

그래서 더하기 3을 할 수가 없다.

논리적으로 말도 안되는 상황임

 

이렇게 경고가 뜬다.

변수를 사용을 하려면

선언을 하고 그 다음에 값을 초기화해주고

그 후에 사용을 해야하는데 건너뛰고 가니까 문제가 됨

 

일반적으로 goto의 사용은 C++에서 해로운 것으로 간주한다.

프로그래머가 실행 지점을 임의로 뛰어넘을 수 있게 하는 이 기능은 스파게티 코드를 만든다.

"스파게티 코드는 컴퓨터 프로그램의 소스 코드가 복잡하게 얽힌 모습을 스파게티의 면발에 비유한 표현"

스파게티 코드는 작동은 정상적으로 하지만, 사람이 코드를 읽으면서 그 코드의 작동을 파악하기 어렵다

 

goto 문을 사용하여 작성된 거의 모든 코드는 루프, 예외 처리와 같은 C++의 다른 문법을 사용하여 더 명확하게

작성할 수 있으므로 C++에서 goto문은 거의 사용하지 않는다.

 

'💘 C++ > 흐름제어' 카테고리의 다른 글

for 문 for statement  (0) 2022.04.26
do-while 문 do-while statement  (0) 2022.04.26
while 문 while statement  (0) 2022.04.25
switch 문 switch statement  (0) 2022.04.24
if 조건문 if conditional statement  (0) 2022.01.30
Comments