可能重复:
Why are there sometimes meaningless do/while and if/else statements in C/C++ macros?
在OpenJDK的源代码中,我找到了这个宏:
#define PUTPROP(props, key, val) \
if (1) { \
// some code
} else ((void) 0)
它可以按照人们的预期使用,例如:
PUTPROP(props, "os.arch", sprops->os_arch);
(如果您感兴趣,它位于文件jdk/src/share/native/java/lang/System.c
)
我想这是某种优化的事情。有人可以解释或提供链接吗?这很难谷歌。
在有人问之前:是的,我只是好奇。