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