반응형
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()쓰세요. 이건 컴파일시 오류를 잡아내기 위한 매크로입니다.
반응형
'C언어 > C언어 심화 & 특수' 카테고리의 다른 글
[C11] C언어 표준 스레드 실행 (0) | 2020.03.21 |
---|---|
[C99] Compound Literals, C에서의 이름없는 임시 객체 (0) | 2020.03.21 |
[C99] 포인터 최적화를 위한 restrict 키워드 (0) | 2020.03.21 |
[C99] C언어에서 표준 bool 타입 사용하기 (0) | 2020.03.21 |
[C11] gets() 대신 get_s()? fgets()? 무엇을 쓸까? (0) | 2020.03.21 |