C에서 goto 문 사용
이 기사에서는 C에서goto
문을 사용하는 방법에 대한 여러 방법을 보여줍니다.
goto
문을 사용하여 C에서 루프 구현
goto
키워드는 C 언어의 일부이며 무조건 점프를 수행하는 구조를 제공합니다. if
및switch
문은 조건부 점프의 예입니다. goto
구성은goto
호출 및 레이블 이름의 두 부분으로 구성됩니다. 코드의 모든 문 앞에는 식별자 뒤에 콜론이 오는 레이블이 올 수 있습니다. goto
호출은 코드 실행이 레이블 뒤의 첫 번째 명령문으로 점프하도록합니다. goto
는 동일한 함수 내의 레이블로만 이동할 수 있으며 레이블은 정의 된 행에 관계없이 전체 함수에서 볼 수 있습니다.
다음 예에서는 각주기에서 변수score
를1000
과 비교하는 간단한 루프를 보여줍니다. score
가 같지 않으면 증가하고 비교 문으로 다시 이동합니다. if
문이 참이면 다른goto
호출이 호출되고 실행이EXIT
레이블로 점프하여 프로그램이 정상적으로 종료됩니다. 다른 많은 코드와 마찬가지로이 예제 코드는goto
문없이 다시 구현할 수 있으므로 비교적 읽기 쉽습니다. 일반적으로goto
문에 대해 격렬한 논쟁이 있었으며 일부는 읽을 수있는 코드에 완전히 해롭다 고 생각하고 다른 일부는 여전히 실용적인 사용 사례를보고 있습니다.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
extern char **environ;
int main(int argc, char *argv[]) {
int score = 1;
START:
if (score > 1000) goto EXIT;
score += 1;
goto START;
EXIT:
printf("score: %d\n", score);
exit(EXIT_SUCCESS);
}
출력:
score: 1001
goto
문을 사용하여 C의 중첩 루프에서 벗어나기
goto
문은 루프 내부의 조건문이 충족되고 일부 코드도 건너 뛰어야하는 경우 제어 흐름을 변경하는 데 유용 할 수 있습니다. 다음 코드 샘플은 환경 변수 배열에 액세스하고 검색하는 유사한 시나리오를 보여줍니다. 외부if
문은 포인터가 유효한지 확인한 다음 루프 실행을 계속합니다. 루프 자체에는 각 환경 변수의 특정 문자열을 확인하는 또 다른 조건이 있습니다. 문자열이 발견되면 더 이상 처리 리소스를 낭비하지 않고 루프를 벗어나 다음printf
문을 건너 뛸 수 있습니다. 이것은goto
호출이 내부 if 문 내부에 포함되어 프로그램이 외부if
문 밖으로 점프하게하고 나머지 코드를 계속 실행하게하는 유용한 경우를 만듭니다.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
extern char **environ;
int main(int argc, char *argv[]) {
if (environ != NULL) {
for (size_t i = 0; environ[i] != NULL; ++i) {
if (strncmp(environ[i], "HOME", 4) == 0) {
puts(environ[i]);
goto END;
}
}
printf("No such variable found!\n");
}
END:
exit(EXIT_SUCCESS);
}
출력:
HOME=/home/username
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook