반응형
일단 goto문의 가장 큰 단점은 프로그램의 흐름을 복잡하게 만든다.
goto문의 사용은 가급적 자제하는 것이 좋다는 의견이 많다.
goto문은 이동할 위치를 지정 해놓고 지정된곳으로 이동시켜주는 함수이다.
이동할 위치를 의미하는 레이블을 선언 해야하며 goto문을 통해서 이동할 레이블을
지정 해주면 되는 것이다.
예를한번 보자.ㄴ
#include<stdio.h>
int main()
{
int num;
printf("숫자 입력 : ");
scanf(%d", &num);
if(num == 1)
goto label1; //label1이라는 레이블로 이동하라는 의미이다.
elseif(num == 2)
goto label2; //label2이라는 레이블로 이동하라는 의미이다.
else
goto label3; //label3이라는 레이블로 이동하라는 의미이다.
//label
label1:
printf("1을 입력 했습니다.");
printf("숫자 입력 : ");
scanf(%d", &num);
if(num == 1)
goto label1; //label1이라는 레이블로 이동하라는 의미이다.
elseif(num == 2)
goto label2; //label2이라는 레이블로 이동하라는 의미이다.
else
goto label3; //label3이라는 레이블로 이동하라는 의미이다.
//label
label1:
printf("1을 입력 했습니다.");
label2:
printf("2을 입력 했습니다.");
label3:
printf("3혹은 다른값을 을 입력 했습니다.");
return 0;
참 쉽죠잉~ㅋ
아래글은 win32api에서 발췌한 goto문 글-
goto문은 프로그램의 구조를 해치기 때문에 goto문을 사용한 소스는 이식성과 재사용에 무척 불리하다. 특정 동작을 하는 코드를 다른 프로그램에서 재사용하려면 goto문에 의해 엉켜 있는 실을 다 풀어야 하고 옮긴 후에 다시 그 프로그램에 맞게 연결해야 하기 때문이다. 아무 규칙이나 형식없이 제어를 마음대로 옮길 수 있다보니 부작용이 많다.
이런 여러 가지 이유로 아주 특별한 경우가 하닌 한은 goto문을 사용하지 말 것을 권장하고 있다. goto문이 아니면 도저히 해결할 수 없는 그런 문제는 없다. goto문이 없어도 for, while, switch같은 제어문으로 필요한 모든 구조를 다 만들 수 있다는 것이 이미 수학적으로 증명되어 있다. 특별한 경우를 제외하고는 goto문을 쓰지 말아야 하며 특히 처음 프로그램에 입문하는 사람은 의식적으로 goto문을 쓰지 않는 연습을 해야 한다.
그렇다면 이렇게 악명높은 goto문을 C언어는 왜 지원하는 것일까? 뿐만 아니라 비교적 최신 언어인 자바나 C#에도 여전히 goto문은 존재하는데 이 명령이 비록 불필요하기는 하지만 가끔 아주 효율적으로 사용할 곳이 남아 있기 때문이다. 시스템 프로그램이나 디바이스 드라이버같이 이식성이나 유지의 편의성, 가독성보다는 무엇보다 성능을 최우선으로 하는 곳에는 여전히 goto가 사용된다. 왜냐하면 goto는 컴퓨터가 알아들을 수 있는 유일한 제어문이며 또한 컴퓨터가 가장 쉽게 실행할 수 있는 제어문이기 때문이다. 컴퓨터는 for나 while같은 건 모른다. 오로지 정해진 번지로 점프하는 것만 가능하며 컴파일러가 for, while을 기계가 알아들을 수 있는 점프문으로 바꿔주는 것이다.
반응형
'C' 카테고리의 다른 글
- #pragma - (0) | 2010.10.20 |
---|---|
- 비트 연산자 - (0) | 2010.10.18 |
===== 웹 컴파일러 ====== (0) | 2010.09.28 |
함수 - (0) | 2010.08.06 |
포인터 (0) | 2010.08.06 |