- C 标准库
- C 库 - 首页
- C 库 - <assert.h>
- C 库 - <complex.h>
- C 库 - <ctype.h>
- C 库 - <errno.h>
- C 库 - <fenv.h>
- C 库 - <float.h>
- C 库 - <inttypes.h>
- C 库 - <iso646.h>
- C 库 - <limits.h>
- C 库 - <locale.h>
- C 库 - <math.h>
- C 库 - <setjmp.h>
- C 库 - <signal.h>
- C 库 - <stdalign.h>
- C 库 - <stdarg.h>
- C 库 - <stdbool.h>
- C 库 - <stddef.h>
- C 库 - <stdio.h>
- C 库 - <stdlib.h>
- C 库 - <string.h>
- C 库 - <tgmath.h>
- C 库 - <time.h>
- C 库 - <wctype.h>
- C 标准库资源
- C 库 - 快速指南
- C 库 - 有用资源
- C 库 - 讨论
C 库 - static_assert() 宏
C 的 assert 库 static_assert() 宏是 C11 标准中引入的一个强大工具,允许您执行编译时断言。这意味着您可以编译时检查某些条件,而不是运行时,从而尽早发现开发过程中的潜在错误。
语法
以下是 static_assert() 宏的 C 库语法:
static_assert (boolean_expression, message);
参数
此宏接受以下参数:
boolean_expression − 这是一个编译器在编译时计算的常量表达式。如果此表达式计算结果为 0(false),则编译失败。
message − 这是一个字符串字面量,在断言失败时提供错误描述。如果断言失败,则在编译期间显示此消息。
返回值
此宏不返回值。相反,如果断言为真,则允许编译继续;如果断言为假,则导致编译时错误。
示例 1:确保数据类型的尺寸
此示例检查 int 的大小是否为 4 字节。如果不是,则编译失败并显示消息“int 必须为 4 字节”。
#include <assert.h> static_assert(sizeof(int) == 4, "int must be 4 bytes"); int main() { return 0; }
输出
上述代码产生以下结果:
error: static assertion failed: "int must be 4 bytes"
示例 2:检查结构对齐
在此示例中,我们使用 offsetof 宏来确保 MyStruct 的 int b 成员与 4 字节边界对齐。如果不是,则编译失败。
#include <assert.h> struct MyStruct { char a; int b; }; static_assert(offsetof(struct MyStruct, b) % 4 == 0, "int b must be aligned to 4 bytes"); int main() { return 0; }
输出
执行上述代码后,我们得到以下结果:
error: static assertion failed: "int b must be aligned to 4 bytes"
广告