Static assertion (since C11)
目录 |
语法
_Static_assert
(
表达式
,
消息
)
|
(自 C11 起) (C23 中弃用) | ||||||||
static_assert
(
表达式
,
消息
)
|
(自 C23 起) | ||||||||
_Static_assert
(
表达式
)
|
(自 C23 起) (C23 中弃用) | ||||||||
static_assert
(
表达式
)
|
(自 C23 起) | ||||||||
| expression | - | 任意 整数常量表达式 |
| message | - | 任意 字符串字面量 |
|
该关键字也可作为便捷宏 static_assert 使用,该宏位于头文件 <assert.h> 中。 |
(C23 前) |
|
实现也可将
|
(C23 起) |
说明
常量表达式在编译时被求值并与零进行比较。若比较结果等于零,则发生编译时错误,且编译器 必须将 message 作为错误信息的一部分显示(但 基本字符集 之外的字符无需显示) (C23前) 应显示 message (若提供)作为错误信息的一部分 (C23起) 。
否则,如果 expression 不等于零,则不会发生任何操作;不会生成任何代码。
关键词
_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 静态断言 (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
声明
|
|