사용범위
Windows, Unix 등 모든 OS에서 사용가능한 표준 API 함수
기능
C언어 표준 함수로 SIGABRT 시그널을 발생시켜 프로그램의 비정상 종료를 의도한다.
헤더
#include <stdlib.h>
※ 함수 사용시 stdlib.h 파일을 include 하지 않는다면 컴파일시 error 발생 ※
함수
void abort();
파라미터
- void
반환값
없음 (void)
잡학지식
abort 함수는 프로그램을 강제종료하는 함수라고 생각하면 된다.
따라서 24시간 서비스를 제공해야하는 프로그램이거나 예외처리를 하는 방향에서는 사용하면 안된다.
abort 함수는 보통 프로그램을 테스트하는데 자주 사용하며, 유닛테스트(unittest) 에서 활용하는것을 자주 볼 수 있다.
SIGABRT 시그널을 발생시켜서 프로그램을 종료시키기 때문에 signal handler를 설치하여 SIGABRT 가 발생하는것을 확인할 수 있다.
추가로 Windows의 Visual Studio를 사용하여 컴파일한 프로그램의 경우 abort 함수가 실행되면 동일하게 종료되지만 몇 가지 차이점이 존재한다. (vs의 기본 signal handler가 있는것으로 추측)
그 중 대표적인것으로는 VS의 Debug로 빌드된 프로그램의 경우 abort 함수 실행시 중단[Abort], 다시 시도[Retry], 무시[Ignore] 메시지 박스가 생성된다.
중단[Abort]을 선택하면 프로그램이 즉시 종료되고 종료 코드 3이 반환되며, 다시 시도[Retry]를 선택하면 디버거가 호출된다.(디버거를 사용 가능한 경우에만 호출된다.)
종료시 제어권 또는 운영체제나 부모 프로세스에게 반환하는 값들도 있으나 상세한 내용은 포스팅 주제와 벗어나기 때문에 생략한다.
Windows 에서 abort에 대한 자세한 정보를 확인하려면 아래 msdn 페이지를 확인하면 된다.
https://learn.microsoft.com/en-us/previous-versions/k089yyh0(v=vs.140)
<소스 코드>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
char *nullptr = NULL;
if(nullptr == NULL) {
printf("Is NULL Pointer!\n");
abort();
}
else {
memcpy(nullptr, "Hello NULL", strlen("Hello NULL"));
}
return 0;
}
※ 실행 결과
Is NULL Pointer!
Process finished with exit code 3
※ VS2015 (Debug) 컴파일의 경우
'C언어 > stdlib.h' 카테고리의 다른 글
[C언어] abs 함수 (정수의 절대값 구하기) (0) | 2023.03.29 |
---|---|
[C언어] realloc (heap 메모리 크기 변경) (0) | 2023.03.28 |
[C언어] free 함수 (heap 메모리 해제) (0) | 2023.03.26 |
[C언어] calloc 함수 (초기화된 heap 메모리 할당) (0) | 2023.03.02 |
[C언어] malloc 함수 (heap 메모리 할당) (1) | 2023.03.01 |