C언어 return 과 exit 차이 / 부분 또는 전체 종료

C언어의 코드를 보면return과 exit 함수를 보게 된다.
이 중 가장 많이 보는 것은 return 이겠지만, 가끔 exit 도 볼 수 있다.
return 과 exit 의 공통점은 프로그램 종료에 있다.
다만, 부분 종료인가? 전체 종료? 하는 시점의 차이가 있다.
결론부터 언급하면,
return 은 현재 프로그램의 흐름을 종료하는 것이며,
exit 는 현재 프로그램 그 자체를 종료하는 것이다.

C언어 return 과 exit 차이 / 부분 또는 전체 종료
C언어 return 과 exit 차이 / 부분 또는 전체 종료

1.프로그램의 종료 목적

프로그램이 종료되는 이유가 뭘까?
여러가지가 있겠지만, 보통 정상 종료와 비정상 종료가 있을 것이다.
상황별로 여러가지가 있겠지만, 비정상적인 상황이 된다면 프로그램은 그 상태 그대로 멈추는 경우도 있다.
사용자가 강제 종료할 수 있겠지만, 키보드나 마우스 등의 입력이 안될 수도 있다.
최소한의 이런 문제를 해소하는 것이 프로그램 종료의 목적이 될 것이다.
종료는 프로그램 흐름의 단순 종료일 수도 있고, 프로그램 자체의 종료가 있을 것이다.
프로그램 흐름 종료의 목적은 현재 실행 중 인 프로그램의 전체적인 기능 동작에 문제가 없도록 하는데 있고, 프로그램 자체 종료의 목적은 오류 또는 버그로 인한 사용자 불편을 방지하는데 있다.
상황은 여러가지가 있다.
프로그램의 종료는 사용자가 컴퓨터를 사용함에 있어 불편함을 해소하는데 있다.

2.return 과 exit()

C언어를 공부하면 `종료`라는 중요한 개념을 공부하게 된다.
프로그램의 흐름에 대한 종료와 프로그램 그 자체의 종료가 있다.
종료라는 것은 특정한 조건 또는 사용자의 의도에 따라 실행 중인 상태를 중단시킴으로써 프로그램의 동작에 영향이 가지 않도록 하는 목적에 있다.
여기서 나오는 것이 return과 exit()이다.
이 둘의 공통점은 중단 또는 종료라는 것에서 개념은 같지만,
return 은 호출이 된 함수 또는 메서드의 흐름을 중단 혹은 종료하는 것이며,
exit()는 호출 여부에 상관없이 현재 실행 중인 프로그램 자체를 종료한다.

3.예제 코드와 실행 결과

C언어에서 return 이 호출이 된 함수 또는 메서드의 동작 흐름을 종료하는 것이며, exit()는 현재 실행 중인 프로그램 자체를 종료하는 것이라 언급했다.
이 부분을 예제로써 만들어 본다.
먼저 종료의 차이에 주목하고 코드를 보면 이해가 쉬울 것이다.

3.1.return / 흐름 종료

C언어에서 return 은 함수나 메서드의 흐름를 종료 또는 중단시키는 역할을 한다.
전체적인 프로그램 동작에는 영향을 주는 부분은 아니다.
프로그램이 동작하는 중에 return을 만나면 해당 부분의 기능은 종료하고, 이후 직전의 코드는 모두 종료된다.
코드를 보자.
순서는 간단하다.
함수를 만들고 return을 호출한 후, exit()를 호출한다.

#include <stdio.h>

/* 함수 선언 */
void CallReturn(void);
void CallExit(void);

/* 프로그램 시작 */
int main(void)
{
    int result = 0;

    printf("----- Start \n");
    printf("\n");

    /* 흐름 종료 */
    CallReturn();

    /* 프로그램 종료 */
    CallExit();

    printf("----- End \n");

    /* 정상 종료 */
    return 0;
}

void CallReturn(void)
{
    printf("----- 흐름 종료\n");
    return;
}

void CallExit(void)
{
    printf("----- 프로그램 종료\n");
    exit();
}

결과 화면을 보자.
프로그램의 시작을 보여주는 Start 문구를 출력하고,
return 으로 호출된 함수의 흐름을 종료한다.
마지막으로 exit() 함수를 호출하여 프로그램 자체를 종료한다.
프로그램 자체가 종료되었기 때문에 End 문구는 출력되지 않는 것을 확인할 수 있다.
아래는 위의 코드에 대한 결과 화면을 보여준다.

return 후 exit()
return 후 exit()

3.2.exit() / 프로그램 종료

return 과는 다르게 exit() 는 함수 형태로 존재한다.
프로그램 자체를 완전히 종료하는 명령어이다.
exit() 함수를 만나는 즉시, 함수 또는 현재 동작 여부를 떠나 모든 것을 무시하고 종료한다.
그런데, 프로그램 출시 전에 많은 테스트를 하게 되지만 굳이 이런 exit() 가 필요한 이유가 있을까?
어떤 상황이 발생하여 프로그램이 멈추거나 비정상적인 동작으로 사용자가 사용하는 경우를 사전에 방지하기 위한 종료이다.
쉽게 말해, 강제 종료.
이제 아래의 코드를 보자.

#include <stdio.h>

/* 함수 선언 */
void CallReturn(void);
void CallExit(void);

/* 프로그램 시작 */
int main(void)
{
    int result = 0;

    printf("----- Start \n");
    printf("\n");

    /* 프로그램 종료 */
    CallExit();

    /* 흐름 종료 */
    CallReturn();

    printf("----- End \n");

    /* 정상 종료 */
    return 0;
}

void CallReturn(void)
{
    printf("----- 흐름 종료\n");
    return;
}

void CallExit(void)
{
    printf("----- 프로그램 종료\n");
    exit();
}

return 을 사용하는 함수를 호출하기 전에 exit() 함수를 사용하는 함수를 먼저 호출했다.
exit() 함수는 프로그램을 강제 종료하는 C언어에서 제공하는 함수이다.
exit() 함수를 만난다면, 프로그램은 강제 종료되고, 이후 모든 작업 또한 중단된다.
아래는 위의 코드에 대한 실행 결과이다.

exit() 후 return
exit() 후 return

exit() 가 실행되고 이후 모든 작업이 종료되며, 예제 코드의 프로그램 또한 종료된 것을 볼 수 있다.

* 참고 자료

댓글

챗지피티 코덱스와 깃허브 연동 방법 | VSCode 사용하기

이미지
챗지피티의 코덱스( Codex )와 깃허브( Github )를 연결하려고 했지만, 연결이 되지 않아 VSCode에서 직접 연결을 하였다. VSCode에 깃허브를 직접 연결하니 오히려 더 좋은 느낌이다. 코덱스에 프롬프트를 실행하면 자동으로 파일을 만들고 나는 그저 깃허브에 저장소를 만들고 푸시( Push )만 하면 된다. 오히려, 챗지피티 코덱스 페이지에서 연결이 제대로 되지 않은 것이 다행(??)이란 느낌이다. 새로운 것을 시도해 보고, 좀 더 편한 방법을 찾았기 때문이다. 왜 연결이 되지 않는 거냐 ?? 좀 편하게 작업하려고 코덱스( Codex )에 깃허브( Github )를 연결하고자 했다. 인증까지 하고, 윈도우 자동 인증까지 삭제하고 다시 했음에도 연결이 되지 않았다. 아~ 뭐지 ? 찾아보니 버그라고 하는데 ~ 몇 일 동안 계속 이어지는 것 보면 이건 뭔가 문제가 있다고 볼 수 밖에 없다. ( 그 원인과 해결책을 찾을 수가 없다. ) 아아 ~ 코덱스 ~ 인증까지 했는데 깃허브 연결이 왜 안되냐 ~ 다행스럽게도 VSCode에서 연결이 된다는 것을 찾게 되었다. 잘 모르겠는 화면에서 익숙한 아이콘과 제목이 눈에 보였다. 바로 ` IDE에서 시도해 보기 ` 버튼이었다. VSCode에서 할 수 있다는 얘기는 들었지만, 이렇게 보여주니 시도해 보는게 당연하겠지. 일단 자세한 내용을 찾아보니 이미 많은 분들이 VSCode에서 챗지피티의 코덱스를 연결해 사용하고 있었다. VSCode가 깃허브에도 연결되니, 생각해 보면 굳이 코덱스를 웹에서 할 필요는 없겠다는 생각이 들었다. 바로 시도를 해 본다. 새로운 방법을 찾다. 이런 새로운 방법을 찾게 되면 왠지 모를 도파민이 생기는 느낌이다. 어쨌든 VSCode를 실행하고 코덱스를 설치하게 되었다. 평소 웹에서 작업하다보니 VSCode에 설치된 코덱스가 익숙하진 않다. 뭐, 걱정할 필요는 없다. 화면을 캡쳐하고 챗지피티 또는 제미나이에 캡쳐화면 자체를 업로드하고 물어보면 된다. 화면 우측 하단에 프롬프트 입력창이 있다. ...

이 블로그의 인기 게시물

ChatGPT Codex GitHub 연결 해제 방법 (앱 삭제까지 정리)

C언어 return 종류와 차이 | return, return 0, return -1, return n

UWP 지원 종료 확정? 2025년 이후 WinUI3 전환해야 하는 이유