【发布时间】:2012-08-20 17:45:50
【问题描述】:
可能重复:
C/C++: How to use the do-while(0); construct without compiler warnings like C4127?
//file error.h
#define FAIL(message) \
do { \
std::ostringstream ossMsg; \
ossMsg << message; \
THROW_EXCEPTION(ossMsg.str());\
} while (false)
//main.cpp
...
FAIL("invalid parameters"); // <<< warning C4127: conditional expression is constant
...
如您所见,警告与do {} while(false) 有关。
我只能想办法禁用警告:
#pragma warning( push )
#pragma warning( disable : 4127 )
FAIL("invalid parameters");
#pragma warning( pop )
但我不喜欢这个解决方案。
我也尝试将这些宏放入 error.h 中,但没有效果。
关于如何以体面的方式抑制此警告的任何 cmets?
谢谢
【问题讨论】:
-
我确定你可以将命令行参数传递给编译器
-
总结:正如在其他问题中回答的那样,禁用警告。不仅在本地使用
#pragma warning,而且完全禁用它。 -
好的,但是为什么不留下没有
do...while的范围呢? -
@Lol4t0 这是一个常见的构造,使得
FAIL(...)需要一个额外的分号来形成完整的语句。这是允许if (...) FAIL(...); else并让else属于if。
标签: c++ visual-c++ compiler-warnings c4127