언제나휴일 2016. 5. 10. 22:37
반응형

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 로 옮길 예정입니다.
 

반응형