다음을 통해 공유


_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(언어 표준 버전 지정)