`<assert.h>` — 조건 검증 매크로

<assert.h> — 조건 검증 매크로

"이 지점에서 이 조건이 반드시 참이어야 해"라는 전제를 코드에 새겨 두고 싶을 때가 있어요. 그럴 때 쓰는 것이 <assert.h>가 제공하는 assert 매크로예요. 조건이 거짓이면 프로그램이 그 자리에서 중단되고 실패 지점을 알려줘요. 그리고 릴리즈 빌드에서는 NDEBUG를 정의해서 이 검증을 통째로 꺼버릴 수도 있어요.

출처: cppreference

본문

이 헤더는 오류 처리 라이브러리(error handling library)의 일부예요.

매크로(Macros)

매크로 설명
assert 사용자가 지정한 조건이 true가 아니면 프로그램을 중단해요. 릴리즈 빌드에서 비활성화될 수 있어요. (함수 매크로)

시놉시스(Synopsis)

#if __STDC_VERSION__ >= 202311L
#   define __STDC_VERSION_ASSERT_H__ 202311L
#   ifdef NDEBUG
#       define assert(...) ((void)0)
#   else
#       define assert(...) /* implementation-defined */
#   endif
#else
#   ifdef NDEBUG
#       define assert(condition) ((void)0)
#   else
#       define assert(condition) /* implementation-defined */
#   endif
#endif

핵심은 NDEBUG가 정의되면 assert가 아무것도 하지 않는 ((void)0)으로 바뀐다는 거예요. 그게 아니라면 구현이 정의하는 방식으로 조건을 검사하고, 거짓이면 표준 오류로 진단 메시지를 내고 프로그램을 중단해요. C23부터는 가변 인자 형태 assert(...)를 지원하므로, 조건 외에 추가 설명 문자열까지 넣을 수 있어요.

더 알아보기

  • <assert.h> 아래의 실제 함수·매크로 정의는 assert 문서를 참고해요.
  • 오류 처리 전반에 대한 Error handling 문서와 함께 보면 좋아요.