Static assertion (since C11)
목차 |
구문
_Static_assert
(
expression
,
message
)
|
(C11부터) (C23에서 사용 중단됨) | ||||||||
static_assert
(
expression
,
message
)
|
(C23부터) | ||||||||
_Static_assert
(
expression
)
|
(C23부터) (C23에서 사용 중단됨) | ||||||||
static_assert
(
expression
)
|
(C23부터) | ||||||||
| expression | - | 임의의 정수 상수 표현식 |
| message | - | 임의의 문자열 리터럴 |
|
이 키워드는 편의를 위한 매크로 static_assert 로도 사용 가능하며, <assert.h> 헤더에서 제공됩니다. |
(C23 이전) |
|
구현체는
|
(C23 이후) |
설명
상수 표현식은 컴파일 타임에 평가되어 0과 비교됩니다. 0과 같으면 컴파일 타임 오류가 발생하며 컴파일러는 반드시 message 를 오류 메시지의 일부로 표시해야 합니다 (단, 기본 문자 집합 에 없는 문자는 표시하지 않아도 됨) (C23까지) 오류 메시지의 일부로 message (제공된 경우)를 표시해야 합니다 (C23부터) .
그렇지 않으면 expression 이 0이 아닌 경우, 아무 일도 발생하지 않습니다; 코드가 생성되지 않습니다.
키워드
_Static_assert , static_assert
예제
#include <assert.h> // C23부터 더 이상 필요하지 않음 int main(void) { // 수학이 작동하는지 테스트, C23: static_assert((2 + 2) % 3 == 1, "Whoa dude, you knew!"); // C23 이전 대안: _Static_assert(2 + 2 * 2 == 6, "Lucky guess!?"); // 이는 컴파일 시간에 오류를 발생시킵니다. // static_assert(sizeof(int) < sizeof(char), "Unmet condition!"); constexpr int _42 = 2 * 3 * 2 * 3 + 2 * 3; static_assert(_42 == 42); // 메시지 문자열은 생략 가능합니다. // const int _13 = 13; // 컴파일 시간 오류 - 정수 상수 표현식이 아닙니다: // static_assert(_13 == 13); }
참고문헌
- C23 표준 (ISO/IEC 9899:2024):
-
- 6.7.11 Static assertions (p: TBD)
- C17 표준 (ISO/IEC 9899:2018):
-
- 6.7.10 정적 어서션 (p: 105)
-
- 7.2 진단 <assert.h> (p: 135)
- C11 표준 (ISO/IEC 9899:2011):
-
- 6.7.10 Static assertions (p: 145)
-
- 7.2 Diagnostics <assert.h> (p: 186-187)
참고 항목
|
사용자가 지정한 조건이
true
가 아닐 경우 프로그램을 중단합니다.
릴리스 빌드에서는 비활성화될 수 있음
(함수 매크로) |
|
|
C++ documentation
for
static_assert
declaration
|
|