`abort` 함수
abort 함수 (abort)
뭔가 심각하게 잘못됐을 때, 정리 같은 건 신경 쓰지 않고 그냥 즉시 프로그램을 죽이고 싶을 때가 있어요. 그럴 때 쓰는 게 abort예요. exit가 차근차근 정리하며 끝내는 것과 달리, abort는 비정상 종료에 초점을 맞춰요.
출처: cppreference
본문
함수 원형
<stdlib.h>에 정의돼 있어요.
void abort(void); // (until C11)
_Noreturn void abort(void); // (since C11, until C23)
[[noreturn]] void abort(void); // (since C23)
설명 (Explanation)
abort를 호출하면, SIGABRT를 처리하는 신호 핸들러가 설치되어 있고 그 핸들러가 반환하지 않는 경우가 아니라면 프로그램이 비정상 종료돼요.
atexit()으로 등록한 함수는 호출되지 않아요. 파일 같은 열려 있는 자원이 닫힐지는 구현 정의예요. 호스트 환경에는 실패를 뜻하는 구현 정의 상태가 반환돼요.
매개변수 (Parameters)
없음.
반환값 (Return value)
없음.
주의할 점 (Notes)
POSIX는 abort()가 SIGABRT 신호를 무시하거나 막는 동작을 덮어쓴다고 규정해요. 즉 SIGABRT를 무시하도록 설정해도 abort()는 여전히 그 신호를 발생시키는 식으로 동작한다는 뜻이에요.
__builtin_trap(gcc, clang, icc)이나 __fastfail/__debugbreak(msvc) 같은 일부 컴파일러 내장 함수를 쓰면 프로그램을 가능한 한 빨리 종료시킬 수도 있어요.
예제 (Example)
파일을 열다 실패하면 abort()로 즉시 끝내는 예시예요.
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE *fp = fopen("data.txt","r");
if (fp == NULL)
{
fprintf(stderr, "error opening file data.txt in function main()\n");
abort();
}
/* Normal processing continues here. */
fclose(fp);
printf("Normal Return\n");
return 0;
}
출력:
error opening file data.txt in function main()
같이 보기 (See also)
exit— 정리하면서 정상 종료atexit—exit()호출 시 불릴 함수 등록quick_exit(C11) — 완전히 정리하지 않고 정상 종료