静态断言 (从 C11 开始)
来自 cppreference.cn
目录 |
[编辑] 语法
_Static_assert ( 表达式 , 消息 ) |
(C11 起)(C23 已弃用) | ||||||||
static_assert ( 表达式 , 消息 ) |
(自 C23 起) | ||||||||
_Static_assert ( 表达式 ) |
(从 C23 开始)(在 C23 中已弃用) | ||||||||
static_assert ( 表达式 ) |
(自 C23 起) | ||||||||
表达式 | - | 任何 整型常量表达式 |
消息 | - | 任何 字符串字面量 |
此关键字也可作为便利宏 static_assert 使用,该宏在头文件 <assert.h> 中提供。 |
(直至 C23) |
实现还可以将 |
(自 C23 起) |
[编辑] 说明
常量表达式在编译时求值并与零比较。如果它等于零,则发生编译时错误,并且编译器必须将消息作为错误消息的一部分显示(除了不要求显示基本字符集中不包含的字符)(直到 C23)应该将消息(如果提供)作为错误消息的一部分显示(从 C23 开始)。
否则,如果 表达式 不等于零,则不发生任何事情;不发出任何代码。
[编辑] 关键词
[编辑] 示例
运行此代码
#include <assert.h> // no longer needed since C23 int main(void) { // Test if math works, C23: static_assert((2 + 2) % 3 == 1, "Whoa dude, you knew!"); // Pre-C23 alternative: _Static_assert(2 + 2 * 2 == 6, "Lucky guess!?"); // This will produce an error at compile time. // static_assert(sizeof(int) < sizeof(char), "Unmet condition!"); constexpr int _42 = 2 * 3 * 2 * 3 + 2 * 3; static_assert(_42 == 42); // the message string can be omitted. // const int _13 = 13; // Compile time error - not an integer constant expression: // static_assert(_13 == 13); }
[编辑] 参考文献
- C23 标准 (ISO/IEC 9899:2024)
- 6.7.11 静态断言 (p: 待定)
- C17 标准 (ISO/IEC 9899:2018)
- 6.7.10 静态断言 (p: 105)
- 7.2 诊断 <assert.h> (p: 135)
- C11 标准 (ISO/IEC 9899:2011)
- 6.7.10 静态断言 (p: 145)
- 7.2 诊断 <assert.h> (p: 186-187)
[编辑] 另请参阅
如果用户指定的条件不为 true,则中止程序。可以在发布版本中禁用。 (函数宏) | |
C++ 文档 关于
static_assert 声明 |