静态断言

来自cppreference.com
< c‎ | language

语法

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

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

(C23 前)

static_assert_Static_assert 拥有相同的效果。 _Static_assert 是为兼容性保留的弃用拼写。

实现亦可定义 static_assert 与/或 _Static_assert 为预定义宏,而 <assert.h> 不再提供 static_assert

(C23 起)

解释

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

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

关键词

_Static_assert, static_assert

示例

#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,则异常终止程序。可以在发行版本禁用。
(宏函数)