언어 자료구조 알고리즘/C11 표준 라이브러리 함수

assert.h

언제나휴일 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 로 옮길 예정입니다.
 

반응형

'언어 자료구조 알고리즘 > 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