命名空间
变体
操作

静态断言 (从 C11 开始)

来自 cppreference.cn
< c‎ | 语言

目录

[编辑] 语法

_Static_assert ( 表达式 , 消息 ) (C11 起)(C23 已弃用)
static_assert ( 表达式 , 消息 ) (自 C23 起)
_Static_assert ( 表达式 ) (从 C23 开始)(在 C23 中已弃用)
static_assert ( 表达式 ) (自 C23 起)
表达式 - 任何 整型常量表达式
消息 - 任何 字符串字面量

此关键字也可作为便利宏 static_assert 使用,该宏在头文件 <assert.h> 中提供。

(直至 C23)

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

实现还可以将 static_assert 和/或 _Static_assert 定义为预定义宏,并且 static_assert 不再由 <assert.h> 提供。

(自 C23 起)

[编辑] 说明

常量表达式在编译时求值并与零比较。如果它等于零,则发生编译时错误,并且编译器必须将消息作为错误消息的一部分显示(除了不要求显示基本字符集中不包含的字符)(直到 C23)应该将消息(如果提供)作为错误消息的一部分显示(从 C23 开始)

否则,如果 表达式 不等于零,则不发生任何事情;不发出任何代码。

[编辑] 关键词

_Static_assert, static_assert

[编辑] 示例

#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 声明