Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C/C++ 어설션(assert) 완벽 정리 – 개념부터 사용 예제까지

이번 글에서는 C/C++에서 어설션(assertion)이 무엇인지 자세히 알아보겠습니다. 어설션은 프로그램 개발 과정에서 특정 조건이 반드시 참(true)이라고 가정되는 지점을 검증하는 데 사용되는 강력한 디버깅 도구입니다.

어설션이란?

C 표준 라이브러리에서 제공하는 매크로인 void assert(int expression)은 진단(diagnostic) 정보를 표준 에러 스트림(stderr)에 출력할 수 있도록 해줍니다. 쉽게 말해, C 프로그램에 진단 기능을 손쉽게 추가할 수 있는 도구라고 할 수 있습니다.

assert() 매크로의 선언

assert() 매크로는 다음과 같이 선언되어 있습니다.

void assert(int expression);

매개변수 설명

assert()의 매개변수는 다음과 같습니다.

  • expression – 변수 또는 임의의 C 표현식이 올 수 있습니다.

동작 방식은 다음과 같습니다.

  • 표현식이 참(TRUE)으로 평가되면: assert()는 아무 작업도 하지 않고 프로그램은 정상적으로 계속 실행됩니다.
  • 표현식이 거짓(FALSE)으로 평가되면: assert()stderr(오류 메시지와 진단 정보를 출력하는 표준 에러 스트림)에 오류 메시지를 출력하고, 프로그램 실행을 즉시 중단(abort)합니다.

예제 코드

#include <assert.h>
#include <stdio.h>
int main () {
    int a;
    char str[50];
    printf("정수 값을 입력하세요: ");
    scanf("%d", &a);
    assert(a >= 10);
    printf("입력한 정수는 %d입니다\n", a);
    printf("문자열을 입력하세요: ");
    scanf("%s", str);
    assert(str != NULL);
    printf("입력한 문자열은: %s\n", str);
    return(0);
}

실행 결과

정수 값을 입력하세요: 11
입력한 정수는 11입니다
문자열을 입력하세요: tutorialspoint
입력한 문자열은: tutorialspoint

어설션 사용 시 주의사항

위 예제에서 사용자가 10 미만의 정수를 입력하면 assert(a >= 10); 구문에서 어설션이 실패하여 다음과 같은 메시지와 함께 프로그램이 종료됩니다.

Assertion failed: a >= 10, file example.c, line 9

참고로, 어설션은 주로 디버깅 목적으로 사용되며, 릴리스(release) 빌드에서는 일반적으로 비활성화됩니다. 헤더를 포함하기 전에 NDEBUG 매크로를 정의하면 모든 assert() 호출이 컴파일 시 제거됩니다. 따라서 어설션 안에는 프로그램의 정상 동작에 필수적인 코드(예: 함수 호출이나 변수 값 변경)를 넣지 않아야 합니다.