_Static_assert
keyword and static_assert
macro (C11)
Tests an assertion at compile time. If the specified constant expression is false
, the compiler displays the specified message and the compilation fails with error C2338; otherwise, there's no effect. New in C11.
_Static_assert
is a keyword introduced in C11. static_assert
is a macro, introduced in C11, that maps to the _Static_assert
keyword.
Syntax
_Static_assert(constant-expression, string-literal);
static_assert(constant-expression, string-literal);
Parameters
constant-expression
An integral constant expression that can be evaluated at compile time. If the expression is zero (false), displays the string-literal
parameter and the compilation fails with an error. If the expression is nonzero (true), then there's no effect.
string-literal
The message displayed if constant-expression
evaluates to zero (false). The message must be made using the base character set of the compiler. The characters can't be multibyte or wide characters.
Remarks
The _Static_assert
keyword, and the static_assert
macro, both test a software assertion at compile time. They can be used at global or function scope.
In contrast, the assert
macro and _assert
and _wassert
functions test a software assertion at runtime and incur a runtime cost.
Microsoft-specific behavior
In C, when you don't include <assert.h>
, the Microsoft compiler treats static_assert
as a keyword that maps to _Static_assert
. Using static_assert
is preferred because the same code will work in both C and C++.
Example of a compile-time assert
In the following example, static_assert
and _Static_assert
are used to verify how many elements are in an enum and that integers are 32 bits wide.
// 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;
}
Requirements
Macro | Required header |
---|---|
static_assert |
<assert.h> |
Compile with /std:c11
.
Windows SDK 10.0.20348.0 (version 2104) or later. For more information on installing the Windows SDK for C11 and C17 development, see Install C11 and C17 support in Visual Studio.
See also
_STATIC_ASSERT
Macro
assert
macro and _assert
and _wassert
functions
/std
(Specify language standard version)