_Static_assert
키워드 및 static_assert
매크로(C11)
컴파일 시간에 어설션을 테스트합니다. 지정된 상수 식이 false
인 경우 컴파일러는 지정된 메시지를 표시하고 컴파일은 C2338 오류와 함께 실패합니다. 그렇지 않을 경우 영향이 없습니다. C11의 새로운 기능입니다.
_Static_assert
는 C11에 도입된 키워드입니다. static_assert
는 C11에 도입된 것으로, _Static_assert
키워드에 매핑되는 매크로입니다.
구문
_Static_assert(constant-expression, string-literal);
static_assert(constant-expression, string-literal);
매개 변수
constant-expression
컴파일 시간에 계산될 수 있는 정수 계열 상수 식입니다. 식이 0이면(false) string-literal
매개 변수가 표시되고 컴파일이 오류를 나타내며 실패합니다. 식이 0이 아니면(true) 영향이 없습니다.
string-literal
constant-expression
이 0(false)으로 계산되면 표시되는 메시지입니다. 컴파일러의 기본 문자 집합을 사용하여 메시지를 작성해야 합니다. 문자는 멀티바이트 또는 와이드 문자일 수 없습니다.
설명
_Static_assert
키워드와 static_assert
매크로는 모두 컴파일 시간에 소프트웨어 어설션을 테스트합니다. 전역 또는 함수 범위에서 사용할 수 있습니다.
이와 대조적으로 assert
assert 매크로와 _assert
및 _wassert
함수는 런타임 시 소프트웨어 어설션을 테스트하고 런타임 비용을 발생시킵니다.
Microsoft 전용 동작
C에서 <assert.h>
를 포함하지 않는 경우 Microsoft 컴파일러는 static_assert
를 _Static_assert
에 매핑되는 키워드로 처리합니다. 동일한 코드가 C와 C++ 모두에서 작동하기 때문에 static_assert
를 사용하는 것이 좋습니다.
컴파일 시간 어설션의 예
다음 예제에서는 static_assert
및 _Static_assert
를 사용하여 열거형에 있는 요소의 수를 확인하고 해당 정수를 32비트 너비로 확인합니다.
// requires /std:c11 or higher
#include <assert.h>
enum Items
{
A,
B,
C,
LENGTH
};
int main()
{
// _Static_assert is a C11 keyword
_Static_assert(LENGTH == 3, "Expected Items enum to have three elements");
// Preferred: static_assert maps to _Static_assert and is compatible with C++
static_assert(sizeof(int) == 4, "Expecting 32 bit integers");
return 0;
}
요구 사항
매크로 | 필수 헤더 |
---|---|
static_assert |
<assert.h> |
/std:c11
를 사용하여 컴파일합니다.
Windows SDK 10.0.20348.0(버전 2104) 이상. C11 및 C17 개발을 위한Windows SDK 설치에 대한 자세한 내용은 Visual Studio에 C11 및 C17 지원 설치를 참조하세요.
참조
_STATIC_ASSERT
매크로
assert
매크로, _assert
및 _wassert
함수/std
(언어 표준 버전 지정)