我看到这个宏出现在代码库的许多地方,以查找特定字段是否被禁用(0或1)。
#define assert_disabled(e) ((void)sizeof(e))
sizeof
如何帮助查找字段是0还是1?
有人可以用一个有效的例子来解释这个吗?
答案 0 :(得分:8)
我很确定在关闭断言时只使用这个宏。使用((void)sizeof(e))
而不仅仅是(void)0
或类似的技巧很聪明:它避免评估e
(主要是),但仍然让编译器检查e
是否为有效表达式,因此当你更改定义以打开断言时,你不会得到意外的编译错误。
答案 1 :(得分:2)
这是我在Linux内核代码中看到的一种blackmagic。
用于在编译时检查表达式'e'。