q09*_*987 9 c++ compiler-warnings visual-c++ 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
...
Run Code Online (Sandbox Code Playgroud)
如您所见,警告与该警告有关do {} while(false)
.
我只能想出以下方法来禁用警告:
#pragma warning( push )
#pragma warning( disable : 4127 )
FAIL("invalid parameters");
#pragma warning( pop )
Run Code Online (Sandbox Code Playgroud)
但我不喜欢这个解决方案.
我也尝试将这些宏放在error.h中而没有效果.
有关如何以体面的方式抑制此警告的任何评论?
谢谢
小智 6
警告是由于while(false)
.此站点提供了如何解决此问题的示例.网站示例(您必须为代码重新处理):
#define MULTI_LINE_MACRO_BEGIN do {
#define MULTI_LINE_MACRO_END \
__pragma(warning(push)) \
__pragma(warning(disable:4127)) \
} while(0) \
__pragma(warning(pop))
#define MULTI_LINE_MACRO \
MULTI_LINE_MACRO_BEGIN \
std::printf("Hello "); \
std::printf("world!\n"); \
MULTI_LINE_MACRO_END
Run Code Online (Sandbox Code Playgroud)
只需在BEGIN和END之间插入代码:
#define FAIL(message) \
MULTI_LINE_MACRO_BEGIN \
std::ostringstream ossMsg; \
ossMsg << message; \
THROW_EXCEPTION(ossMsg.str());\
MULTI_LINE_MACRO_END
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5433 次 |
最近记录: |