assert() — 조건 확인
형식
#include <assert.h>
void assert(int expression);
언어 레벨
ANSI
스레드세이프
아니오
설명
assert() 함수는
expression이 false(0)이면 stderr에 진단 메세지를 인쇄하고
프로그램을 중단합니다. 진단 메세지는 편집 중에 사용된 언어 레벨에 따라 다음 형식 중 하나입니다.
Assertion failed: expression, file filename, line line-number.
Assertion failed: expression, file filename, line line-number, function function-name.
assert() 함수는 expression이 true(0이 아님)이면 조치를 수행하지 않습니다.
프로그램 논리 오류를 식별하려면 assert() 함수를 사용하십시오. 프로그램이 의도한 대로 작동하는 경우에만 true를 보유한 expression을 선택하십시오. 프로그램을 디버깅한 후에는 특수 no-debug ID인 NDEBUG를 사용하여 프로그램에서 assert() 호출을 제거할 수 있습니다. #define 지시문을 가진 값에 NDEBUG를 정의하면 C 프리프로세서는 void 표현식에 대한 모든 assert 호출을 확장합니다. NDEBUG를 사용하는 경우에는 프로그램에 <assert.h>를 포함시키기 전에 정의해야 합니다.
리턴값
리턴값이 없습니다.
참고: assert() 함수는
매크로로 정의됩니다. #undef 지시문을 assert()에 사용하지 마십시오.
예
이 예에서 assert() 함수는
널(null) 스트링과 빈 스트링에 대해 string을 테스트하고 이러한 인수를 처리하기 전에 length가
양수임을 확인합니다.
#include <stdio.h>
#include <assert.h>
void analyze (char *, int);
int main(void)
{
char *string = "ABC";
int length = 3;
analyze(string, length);
printf("The string %s is not null or empty, "
"and has length %d \n", string, length);
}
void analyze(char *string, int length)
{
assert(string != NULL); /* cannot be NULL */
assert(*string != '\0'); /* cannot be empty */
assert(length > 0); /* must be positive */
}
/**************** Output should be similar to ******************
The string ABC is not null or empty, and has length 3
*****************************************************************/