4

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

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

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

有人可以用一个工作示例来解释这一点吗?

4

2 回答 2

8

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

于 2012-10-21T18:50:56.203 回答
2

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

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

于 2012-10-21T18:51:39.077 回答