【发布时间】:2015-03-04 05:15:57
【问题描述】:
我一直在检查某人的代码,我遇到了这个:
#else //If not in Debug mode
#define LOG_WARNING(str) do { (void)sizeof(str); } while(0)
#define LOG_INFO(str) do { (void)sizeof(str); } while(0)
// ... More #define directives
#endif
显然,do { (void)sizeof(str); } while(0) 是经过精心编写的,因此编译器可以完全忽略该指令。
这是如何工作的?
【问题讨论】:
-
看起来像是
( void )str ;的精巧版本。 -
@LuchianGrigore 这在这里没有任何意义。看来作者过于谨慎了。
-
@LuchianGrigore 我知道
do { ... } while(0)在#define 指令上使用时的工作原理。但是,我不知道为什么添加(void)sizeof(str)会使其被编译器忽略 -
@2501
(void)str能达到同样的效果吗?你知道它是如何工作的吗?我真的很感兴趣
标签: c++ visual-c++ macros c-preprocessor