如何为do{}while(false)禁用C4127
How to disable C4127 for do {} while(false)
可能重复:
C/C++:如何使用do while(0);构造时没有像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 )
但我不喜欢这种解决方案。
我还试图将这些宏放入错误.h中,但没有效果。
关于如何以体面的方式压制这一警告,有什么意见吗?
感谢
警告是由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
只需在BEGIN和END之间插入代码:
#define FAIL(message)
MULTI_LINE_MACRO_BEGIN
std::ostringstream ossMsg;
ossMsg << message;
THROW_EXCEPTION(ossMsg.str());
MULTI_LINE_MACRO_END
1)为什么不只是THROW_EXCEPTION("invalid parameters")
2) while(true)
和CCD_?
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 嵌入方指针压缩已禁用
- 伪造事实↔false
- QueryWorkingSet总是返回false
- clang格式:禁用排序包含
- 如何在C++中找到active directory中禁用和锁定的窗口帐户
- 如何在C++生成器中禁用"使用调试.dcus"
- 如何在GTK程序运行时禁用屏幕保护程序/电源管理/屏幕消隐
- 如何区分地图中的 0 和 false?
- 如何禁用 CPU 的无序执行
- 模板参数列表中的 false 在模板初始化期间计算为什么?
- 基类中的默认析构函数禁用子类中的移动构造函数(如果有成员)
- Arduino-C++ bool 不会从 false 变为 true
- 如何禁用VTK的热键
- 当返回类型声明为 ListNode 时,我们是否可以返回 false<T>*
- 在C++中禁用宏中的逗号
- 禁用自动捕获 Googletest 单元测试中的C++异常
- 在VS Code中编译C / C ++时如何禁用自动创建EXE文件?
- EnableWindow(hWnd, false) 不禁用键盘输入
- 如何为do{}while(false)禁用C4127