Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C/C++에서 exit(), abort(), assert() 함수 완벽 정리

exit() 함수

exit() 함수는 호출된 시점에서 이후의 모든 작업을 중단하고 프로그램을 즉시 종료할 때 사용합니다. exit()이 호출되면 해당 프로세스가 곧바로 종료되며, 이 함수는 stdlib.h 헤더 파일에 선언되어 있습니다. 또한 어떠한 값도 반환하지 않습니다.

C 언어에서 exit()의 문법은 다음과 같습니다.

void exit(int status_value);

여기서 각 요소의 의미는 다음과 같습니다.

status_value − 부모 프로세스에 반환되는 값입니다.

다음은 C 언어에서 exit()를 사용한 예제입니다.

예제

#include <stdio.h>
#include <stdlib.h>
int main() {
    int x = 10;
    printf("x의 값 : %d\n", x);
    exit(0);
    printf("exit() 호출");
    return 0;
}

출력 결과

x의 값 : 10

위 프로그램에서는 변수 'x'를 초기화한 뒤 그 값을 출력하고 exit() 함수를 호출합니다. exit()이 호출되는 순간 실행이 즉시 종료되기 때문에 그 뒤에 있는 printf() 문은 실행되지 않습니다. exit() 호출 부분은 다음과 같습니다.

int x = 10;
printf("x의 값 : %d\n", x);
exit(0);

abort() 함수

abort() 함수는 프로그램을 비정상적으로 종료시키는 함수입니다. 일반적인 프로그램 종료 목적으로는 이 함수의 사용이 권장되지 않으며, 역시 stdlib.h 헤더 파일에 선언되어 있습니다.

C 언어에서 abort()의 문법은 다음과 같습니다.

void abort(void);

다음은 C 언어에서 abort()를 사용한 예제입니다.

예제

#include <stdio.h>
#include <stdlib.h>
int main() {
    int a = 15;
    printf("a의 값 : %d\n", a);
    abort();
    printf("abort() 호출");
    return 0;
}

실행 결과는 다음과 같습니다.

출력 결과

a의 값 : 15

위 프로그램에서는 변수 'a'를 초기화하여 값을 출력한 후 abort() 함수를 호출합니다. abort()가 호출되면 실행이 즉시 종료되지만, 정상적인 종료 절차를 거치지 않고 비정상적인 방식으로 종료된다는 점이 exit()와 다릅니다. abort() 호출 부분은 다음과 같습니다.

int a = 15;
printf("a의 값 : %d\n", a);
abort();

assert() 함수

assert() 함수는 assert.h 헤더 파일에 선언되어 있습니다. 이 함수는 인자로 전달된 표현식을 평가하며, 표현식이 참(true)이면 아무 작업도 수행하지 않고, 거짓(false)이면 프로그램 실행을 중단합니다.

C 언어에서 assert()의 문법은 다음과 같습니다.

void assert(int exp);

여기서 각 요소의 의미는 다음과 같습니다.

exp − 평가하고자 하는 표현식입니다.

다음은 C 언어에서 assert()를 사용한 예제입니다.

예제

#include <stdio.h>
#include <assert.h>
int main() {
    int a = 15;
    printf("a의 값 : %d\n", a);
    assert(a!=15);
    printf("assert() 호출");
    return 0;
}

출력 결과

a의 값 : 15
main: main.c:9: main: Assertion `a!=15' failed.

위 프로그램에서는 변수 'a'를 초기화한 뒤 그 값을 출력하고 assert() 함수를 호출합니다. assert()가 호출되면 'a'가 15와 같지 않다는 표현식을 평가하게 되는데, 실제로는 거짓이므로 프로그램 실행이 중단되고 오류 메시지가 출력됩니다. assert() 호출 부분은 다음과 같습니다.

int a = 15;
printf("a의 값 : %d\n", a);
assert(a!=15);

세 함수의 핵심 차이점 정리

  • exit(): 정상적인 종료 절차를 수행하면서 프로그램을 즉시 종료하며, 상태 코드를 부모 프로세스에 전달할 수 있습니다.
  • abort(): 정리 작업 없이 프로그램을 비정상적으로 강제 종료하며, SIGABRT 신호를 발생시킵니다.
  • assert(): 주로 디버깅 목적으로 조건을 검사하며, 조건이 거짓일 경우 프로그램을 중단하고 오류 메시지를 출력합니다.