我正在阅读 linux 源代码和注意语句,如
if (0) {
....
}
这是什么魔法? 示例:http://lxr.free-electrons.com/source/arch/x86/include/asm/percpu.h#L132
最佳答案
在这个特定的宏中,您指的是:
132 if (0) { \
133 pao_T__ pao_tmp__; \
134 pao_tmp__ = (val); \
135 (void)pao_tmp__; \
136 } \
if (0) { ... }
block 是一种“使用”val
而不实际使用 的方式。此代码块的主体将由编译器进行评估,但实际上不会生成任何代码,因为 if (0)
应该始终被删除 - 它永远不会运行。
请注意,这是一个宏。因此,var
和 val
可以是任何类型——预处理器不关心。 pao_T__
typedef
为 typeof(var)
。作为Andy Shevchenko pointed out ,此代码块的存在是为了确保 val
和 var
类型兼容,方法是创建与 var
类型相同的变量,并且分配 val
给它。如果类型不兼容,此分配将产生编译器错误。
总的来说,Linux 内核的很多头文件应该被认为是黑魔法。它们是一个有趣的元编程示例,人们可以使用 C 预处理器进行元编程,通常是为了提高性能。
关于c - 以零为条件的 If 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29020617/