NAME

assert - 진술이 거짓이면 프로그램 중단하기

SYNOPSIS

#include <assert.h>

void assert(scalar expression);

DESCRIPTION

이 매크로는 제한된 디버깅 출력을 내놓는 크래시를 통해 프로그래머가 자기 프로그램의 버그를 찾거나 예외적 경우를 다루는 걸 돕는다.

expression이 거짓이면 (즉 0과 비교해서 같으면) 표준 오류로 오류 메시지를 찍고 abort(3) 호출로 프로그램을 종료시킨다. 오류 메시지에는 assert() 호출이 있는 파일과 함수의 이름, 호출의 소스 코드 행 번호, 인자 텍스트가 포함된다. 다음과 같은 식이다.

prog: some_file.c:16: some_func: Assertion `val == 0' failed.

<assert.h>를 마지막으로 포함하는 시점에 매크로 NDEBUG가 정의돼 있으면 assert() 매크로가 아무 코드도 만들지 않고, 그래서 아무것도 하지 않는다. 오류 조건 탐지에 assert()를 쓰는 경우에는 NDEBUG를 정의하지 않기를 권한다. 소프트웨어가 비결정적으로 동작할 수 있기 때문이다.

RETURN VALUE

아무 값도 반환하지 않는다.

ATTRIBUTES

이 절에서 사용하는 용어들에 대한 설명은 attributes(7)를 보라.

인터페이스 속성
assert() 스레드 안전성 MT-Safe

CONFORMING TO

POSIX.1-2001, POSIX.1-2008, C89, C99. C89에서는 expressionint 타입이어야 하고 아닌 경우 동작 결과가 규정되어 있지 않다. 하지만 C99에서는 어떤 스칼라 타입도 될 수 있다.

BUGS

assert()가 매크로로 구현되어 있다. 검사하는 식에 부대 효과가 있으면 NDEBUG가 정의돼 있는지 여부에 따라 프로그램 동작이 달라질 수도 있다. 이 때문에 디버깅을 켜면 사라져 버리는 하이젠버그가 생길 수 있다.

SEE ALSO

abort(3), assert_perror(3), exit(3)


2021-03-22