3

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

#define inDebugMode true

或者

const bool inDebugMode = true;

Visual Studio 2010 中的编译器总是给出警告:

warning C4127: conditional expression is constant

这是为什么?我怎样才能正确声明它?

4

3 回答 3

7

没有看到代码,我怀疑你有以下构造:

if (inDebugMode)
{
}

这将永远是true,因此警告。

推荐使用预处理器而不是if

#define inDebugMode 1

#if inDebugMode
#endif

这将消除警告并防止在不需要时编译调试代码。请注意,您还可以通过编译器开关指定宏的值/D

cl.exe /DinDebugMode=1 ...

但是如果您选择命令行选项,您需要确保重建所有源,而不仅仅是更改的源。

于 2012-06-04T08:33:10.507 回答
3

这个警告不是为了定义,而是为了使用它。
假设您在代码中编写如下内容:

if (inDebugMode)
{
    //your code
}

当编译器遇到它时(在定义的情况下预编译之后),这总是正确的,并且它认为不需要“if”。这样它只是一个警告而不是错误。
为了避免它,你可以这样做:

#define inDebugMode 1
//some code
#if inDebugMode
    //your code you only want to run in debug
#endif

这样,如果您不调试“#if”部分中的所有代码,预编译器将省略,编译器不会有问题。

于 2012-06-04T08:36:46.717 回答
1

如果您不喜欢预处理器指令并且想使用 const bool,那么您可以直接禁用“警告 C4127”(项目属性/C/C++/高级/禁用特定警告/输入“4127”)。

于 2012-06-04T08:45:38.450 回答