C 库 - static_assert() 宏



C 的 assertstatic_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"
广告