定义在C ++中发出警告

时间:2012-06-04 08:29:40

标签: c++ visual-studio-2010

我想以这两种方式声明调试标志是打开还是关闭:

#define inDebugMode true

const bool inDebugMode = true;

Visual Studio 2010中的编译器始终发出警告:

warning C4127: conditional expression is constant

为什么?我该如何正确宣布?

3 个答案:

答案 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”)。