定义在C++中发出警告

oli*_*dev 3 c++ visual-studio-2010

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

#define inDebugMode true
Run Code Online (Sandbox Code Playgroud)

要么

const bool inDebugMode = true;
Run Code Online (Sandbox Code Playgroud)

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

warning C4127: conditional expression is constant
Run Code Online (Sandbox Code Playgroud)

这是为什么?我怎样才能正确申报?

hmj*_*mjd 7

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

if (inDebugMode)
{
}
Run Code Online (Sandbox Code Playgroud)

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

建议使用预处理器而不是if:

#define inDebugMode 1

#if inDebugMode
#endif
Run Code Online (Sandbox Code Playgroud)

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

cl.exe /DinDebugMode=1 ...
Run Code Online (Sandbox Code Playgroud)

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

  • 如果你希望在将值更改为0时将其设置为"false",请使用`#if` not`#ifdef`. (2认同)