<assert.h> 헤더에서는 assert 매크로 함수를 제공합니다.
void assert(scalar expression); expression이 참이 아니면 에러를 출력하고 에러 창을 띄움
입력 매개 변수 리스트
express 참과 거짓을 판별할 수 있는 표현
반환 값
없음
assert는 프로그래밍할 때 프로그램을 더 이상 진행할 수 없는 조건인지 확인하여 개발 단계에서 버그를 빠르게 알 수 있게 하는 수단으로 많이 사용합니다. 만약 입력 인자로 전달한 표현식의 결과가 참이면 다음 코드를 수행하고 거짓이면 소스 코드 몇 번째 라인에서 문제가 있는지 출력하고 에러 창을 띄웁니다.
다음의 예제 코드는 영어로 1~10 사이의 정수를 표현하면 한글로 번역하는 함수를 구현하고 테스트하는 예제입니다. 입력인자로 한글로 번역한 내용을 저장할 버퍼와 영어 문자열을 전달받는데 만약 번역한 내용을 저장할 버퍼가 NULL이면 아무 작업도 할 수 없습니다. 이럴 때 에러 창을 띄우게 하여 잘못 사용한 부분이 있는 것을 개발 단계에서 빠르게 판단할 수 있습니다.
사용 예
//C언어 표준 라이브러리 함수 가이드 //void assert(scalar expression); expression이 참이 아니면 에러 창을 띄움 #include <assert.h> #include <string.h> #include <stdio.h> char *Translate(char *dest, size_t size, const char *english);//영어를 한글로 번역 int main(void) { char buf1[100]; char *buf2 = 0; if (Translate(buf1, sizeof(buf1), "one") != NULL) { printf("one => %s\n", buf1); } //잘못 사용한 예 if (Translate(buf2, sizeof(buf2), "two") != NULL) { printf("two => %s\n", buf2); } return 0; } typedef struct { const char *korean; const char *english; }KorEng; const KorEng dictionary[10]= { {"하나","one"}, { "둘","two" }, { "셋","three" }, { "넷","four" }, { "다섯","five" }, { "여섯","six" }, { "일곱","seven" }, { "여덟","eight" }, { "아홉","nine" },{"열","ten"} };//사전 char *Translate(char *dest,size_t size,const char *english) { int i = 0; assert(dest != NULL);//dest가 NULL이면 에러 창을 띄움 for (i = 0; i < 10; i++) { if (strcmp(dictionary[i].english, english) == 0) { strcpy_s(dest, size, dictionary[i].korean); return dest; } } return NULL; }
출력
one => 하나 Assertion failed: dest != NULL, file c:\C언어 표준라이브러리 함수\ex_assert_h\ex_assert_h\program.c, line44