以下“assert_disabled()”宏如何工作?

时间:2012-10-21 18:45:50

标签: c assert sizeof

我看到这个宏出现在代码库的许多地方,以查找特定字段是否被禁用(0或1)。

#define assert_disabled(e)      ((void)sizeof(e))

sizeof如何帮助查找字段是0还是1?

有人可以用一个有效的例子来解释这个吗?

2 个答案:

答案 0 :(得分:8)

我很确定在关闭断言时只使用这个宏。使用((void)sizeof(e))而不仅仅是(void)0或类似的技巧很聪明:它避免评估e(主要是),但仍然让编译器检查e是否为有效表达式,因此当你更改定义以打开断言时,你不会得到意外的编译错误。

答案 1 :(得分:2)

这是我在Linux内核代码中看到的一种blackmagic。

用于在编译时检查表达式'e'。