Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我看到这个宏出现在代码库的许多地方,以查找特定字段是否被禁用(0 或 1)。
#define assert_disabled(e) ((void)sizeof(e))
这里如何sizeof帮助查找字段是 0 还是 1?
sizeof
有人可以用一个工作示例来解释这一点吗?
我很确定这个宏只是在关闭断言时使用。使用((void)sizeof(e))而不是 just(void)0或类似的技巧很聪明:它避免了评估e(大多数情况下),但仍然让编译器检查e是否为有效表达式,因此当您更改定义以打开断言时,您不会遇到意外的编译错误。
((void)sizeof(e))
(void)0
e
这是我在 Linux 内核代码中看到的一种黑魔法。
它用于在编译时检查表达式'e'。