我想以这两种方式声明调试标志是打开还是关闭:
#define inDebugMode true
或
const bool inDebugMode = true;
Visual Studio 2010中的编译器始终发出警告:
warning C4127: conditional expression is constant
为什么?我该如何正确宣布?
答案 0 :(得分:7)
如果没有看到代码,我怀疑你有以下构造:
if (inDebugMode)
{
}
始终为true
,因此警告。
建议使用预处理器而不是if
:
#define inDebugMode 1
#if inDebugMode
#endif
这将删除警告并阻止在不需要时编译调试代码。注意,您还可以通过编译器开关/D
指定宏的值:
cl.exe /DinDebugMode=1 ...
但是如果选择命令行选项,则需要确保重建所有源,而不仅仅是更改的源。
答案 1 :(得分:3)
此警告不是用于定义,而是用于使用它 让我们说你在代码中写道:
if (inDebugMode)
{
//your code
}
当编译器遇到它时(在定义的情况下在预编译之后),这总是正确的,并且它认为不需要“if”。这是一种警告,而不是错误 为了避免它,你可以这样做:
#define inDebugMode 1
//some code
#if inDebugMode
//your code you only want to run in debug
#endif
这样一来,如果不调试“#if”部分中的所有代码,预编译器将省略这些代码,编译器就不会有问题。
答案 2 :(得分:1)
如果您不喜欢预处理程序指令并且想使用const bool,那么您可以直接禁用“警告C4127”(项目属性/ C / C ++ /高级/禁用特定警告/类型“4127”)。