静态断言

来自cppreference.com
< c‎ | language

语法

_Static_assert ( 表达式 , 消息 ) (C11 起)
_Static_assert ( 表达式 ) (C23 起)
表达式 - 任何整数常量表达式
消息 - 任何字符串字面量

此关键词亦可用作便利宏 static_assert ,宏于头文件 <assert.h> 可用。

解释

在编译时求值该常量表达式并将它与零比较。若它比较等于零,则发生编译错误,而若提供 消息 ,则编译器必须将它作为错误消息的一部分显示(除了不要求显示基本源码字符集以外的字符)。

否则,若 表达式 不等于零,则什么都不发生;不生成代码。

关键词

_Static_assert

示例

#include <assert.h>
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 (p: 105)
  • 7.2 Diagnostics <assert.h> (p: 135)
  • C11 标准(ISO/IEC 9899:2011):
  • 6.7.10 Static assertions (p: 145)
  • 7.2 Diagnostics <assert.h> (p: 186-187)

参阅

若用户指定的条件非true,则异常终止程序。可以在发行版本禁用。
(宏函数)