Programming Tools/TCPL C Language

[C Language] Chap.3 Control Flow - Goto와 Label

LiDARian 2021. 6. 11. 18:10
반응형

Goto와 Label

보통 C언어를 배우면 goto를 사용하지 말라고 하는데, 사실 goto가 유용한 경우가 한정적으로 존재하기는 한다.

여러겹의 loop로 싸인 곳을 탈출할 때에 특히 유용하다. 이런식이다.

for(...)
    for(...)
        for(...){
            ...
            if(disaster)
                goto error;
        }
...
error:
    do error handling

goto를 사용해서 배열간 같은 원소의 존재유무를 찾는 프로그램을 짜면

#include<stdio.h>

int main(){
    int i, j, n, m;
    int a[] = {1,2,3,4,5,6};
    int b[] = {7,8,9,10,11,12,1};

    n = sizeof(a)/sizeof(int);
    m = sizeof(b)/sizeof(int);

    for(i = 0; i < n; i++)
        for(j = 0; j<m; j++)
            if(a[i]==b[j])
                goto found;

found:
    printf("found!");
}

출력
found!

물론 이렇게 쓸 수도 있다.

#include<stdio.h>

int main(){
    int i, j, n, m;
    int found;
    int a[] = {1,2,3,4,5,6};
    int b[] = {7,8,9,10,11,12,1};

    n = sizeof(a)/sizeof(int);
    m = sizeof(b)/sizeof(int);

    for(i = 0; i < n; i++)
        for(j = 0; j<m; j++)
            if(a[i]==b[j])
                found = 1;

if(found)
    printf("found!");
}
반응형