静态断言
来自cppreference.com
语法
_Static_assert ( 表达式 , 消息 )
|
(C11 起)(C23 中弃用) | ||||||||
static_assert ( 表达式 , 消息 )
|
(C23 起) | ||||||||
_Static_assert ( 表达式 )
|
(C11 起)(C23 中弃用) | ||||||||
static_assert ( 表达式 )
|
(C23 起) | ||||||||
表达式 | - | 任何整数常量表达式 |
消息 | - | 任何字符串字面量 |
此关键词亦可用作便利宏 static_assert ,宏可用于头文件 |
(C23 前) |
实现亦可定义 |
(C23 起) |
解释
在编译时求值该常量表达式并将它与零比较。若它比较等于零,则发生编译错误,而编译器必须将 消息 作为错误消息的一部分显示(除了不要求显示基本字符集以外的字符) (C23 前)在提供 消息 时应该将它作为错误消息的一部分显示 (C23 起)。
否则,若 表达式 不等于零,则什么都不发生;不生成代码。
关键词
示例
运行此代码
#include <assert.h> // C23 起不再需要 int main(void) { // 测试数学是否正常工作 static_assert(2 + 2 == 4, "Whoa dude!"); // 或 _Static_assert(... // 这会在编译时产生错误。 static_assert(sizeof(int) < sizeof(char), "this program requires that int is less than char"); }
引用
- C17 标准(ISO/IEC 9899:2018):
- 6.7.10 Static assertions (第 105 页)
- 7.2 Diagnostics <assert.h> (第 135 页)
- C11 标准(ISO/IEC 9899:2011):
- 6.7.10 Static assertions (第 145 页)
- 7.2 Diagnostics <assert.h> (第 186-187 页)
参阅
若用户指定的条件非true,则异常终止程序。可以在发行版本禁用。 (宏函数) |