【发布时间】:2010-12-29 02:54:37
【问题描述】:
由于in this answer 所述的原因,我经常在我的#defines 中使用do-while(0) 构造。此外,我正在尝试使用编译器的尽可能高的警告级别来捕捉更多潜在问题,并使我的代码更加健壮和跨平台。所以我通常使用 -Wall 和 gcc 和 /Wall 和 MSVC。
不幸的是,MSVC 抱怨 do-while(0) 构造:
foo.c(36) : warning C4127: conditional expression is constant
我应该怎么处理这个警告?
只是对所有文件全局禁用它?对我来说这似乎不是一个好主意。
【问题讨论】:
-
既然你已经添加了 C++ 标签,是否可以将
#define宏转换为内联函数?这样会更安全。 -
我还添加了 C 标签,所以我想我已经询问了与 C 兼容的解决方案。那我应该删除 C++ 标签吗?
-
你试过像 sizeof(char) != 1...这样的条件吗?
-
@bialix:因为语言和解决方案有很大不同,所以是的。删除您不想回答的语言标签
标签: c++ c visual-c++ macros compiler-warnings