assert.h
<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
사용한 함수
[언어 자료구조 알고리즘/C11 표준 라이브러리 함수] - strcmp
[언어 자료구조 알고리즘/C11 표준 라이브러리 함수] - strcpy_s
[언어 자료구조 알고리즘/C11 표준 라이브러리 함수] - printf
앞으로 프로그래밍 관련 글은 새롭게 개설한 언제나 휴일 전용 사이트에서 만나보세요.
2017년 1월 1일까지 이 곳의 프로그래밍 자료는 http://ehpub.co.kr 로 옮길 예정입니다.
'언어 자료구조 알고리즘 > C11 표준 라이브러리 함수' 카테고리의 다른 글
iscntrl (0) | 2016.05.10 |
---|---|
isblank (0) | 2016.05.10 |
isalpha (0) | 2016.05.10 |
isalnum (0) | 2016.05.10 |
ctype.h (0) | 2016.05.10 |
실수 판별식 매크로 (0) | 2016.05.10 |
fmin, fminf, fminl (0) | 2016.05.10 |
fmax, fmaxf, fmaxl (0) | 2016.05.10 |
fdim, fdimf, fdiml (0) | 2016.05.10 |
nexttoward, nexttowardf, nexttowardl (0) | 2016.05.10 |