当前位置: C语言 -- 标准库 -- <assert.h> -- static_assert

static_assert宏


概要:

static_assert<assert.h>头文件中定义,会扩展为C语言关键词_Static_assert


静态断言声明:

_Static_assert(constant-expression, string-literal);


描述:

该关键词也称为静态断言,用于在程序编译时测试断言。

常量表达式(constant-expression)应为整型常量表达式。如果常量表达式的值不等于0,断言将不起作用;反之如果常量表达式的值等于0,将生成一条包含字符串字面量(string-literal)的诊断信息,但非基本源字符集字符不要求出现在诊断信息中。

由于_Static_assert断言是在程序编译期间测试断言,不会生成目标代码,因此_Static_assert断言不会造成程序运行期间性能损失。


参数:
constant-expression

该参数为整型常量表达式,如果表达式的值为0,将触发断言;反之断言将不会被触发。

string-literal

该参数为字符串字面量,字符串字面量将包含在诊断信息中。


范例:
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
/*宏static_assert范例*/

#include <assert.h>

int main(void)
{
    static_assert(sizeof(int) != 4, "Bytes of integer type is equal to 4.");
    static_assert(sizeof(int) == 4, "Bytes of integer type is not equal to 4.");

    return 0;
}

结果:

结果与具体实现有关。如果int类型数据的字节数等于4,第一个静态断言将被触发,生成包含字符串字面量的诊断信息,第二个静态断言不会被触发;否则第一个静态断言不会被触发,第二个静态断言将被触发。


相关内容:
assert 程序调试时测试断言的宏。
NDEBUG 影响宏assert行为的宏。