C언어/C언어 심화 & 특수

[C11] 컴파일 타임 오류내기, static_assert

카루-R 2020. 3. 21. 10:07
반응형

assert() 자주 사용하시나요? 프로그램에서 런타임 오류를 잡아내고 예외를 처리하는데 쓰이죠.

하지만 컴파일 타임에 예외가 있으면 컴파일이 안 되게 만드는, 정적 어설션은 이보다 더 유용할 때가 많습니다. C++에서 static_assert() 키워드를 도입했듯이, C언어에서도 static_assert()를 지원합니다.

물론 C++처럼 네이티브로 지원하는 것은 아니고, 헤더를 하나 포함하거나 살짝 다른 예약어를 사용해야 합니다.

_Static_assert(식, 문자열) (C11 예약어)
_Static_assert(식) (C2x)

#include <assert.h> // 를 하면
static_assert(식, 문자열) // 이렇게 작성해도 됩니다.
#include <assert.h>

int main() {
    static_assert(1 + 1 == 2, "컴퓨터가 계산이 이상합니다.");
}

이렇게 사용이 가능합니다. 단, 식이 들어가는 자리에는 매크로를 포함한 상수 식만 올 수 있고 변수는 올 수 없습니다. 런타임에 사용할 거라면 그냥 assert()쓰세요. 이건 컴파일시 오류를 잡아내기 위한 매크로입니다.

 

반응형