我想以这两种方式声明调试标志是打开还是关闭:
#define inDebugMode true
或者
const bool inDebugMode = true;
Visual Studio 2010 中的编译器总是给出警告:
warning C4127: conditional expression is constant
这是为什么?我怎样才能正确声明它?
我想以这两种方式声明调试标志是打开还是关闭:
#define inDebugMode true
或者
const bool inDebugMode = true;
Visual Studio 2010 中的编译器总是给出警告:
warning C4127: conditional expression is constant
这是为什么?我怎样才能正确声明它?
没有看到代码,我怀疑你有以下构造:
if (inDebugMode)
{
}
这将永远是true
,因此警告。
推荐使用预处理器而不是if
:
#define inDebugMode 1
#if inDebugMode
#endif
这将消除警告并防止在不需要时编译调试代码。请注意,您还可以通过编译器开关指定宏的值/D
:
cl.exe /DinDebugMode=1 ...
但是如果您选择命令行选项,您需要确保重建所有源,而不仅仅是更改的源。
这个警告不是为了定义,而是为了使用它。
假设您在代码中编写如下内容:
if (inDebugMode)
{
//your code
}
当编译器遇到它时(在定义的情况下预编译之后),这总是正确的,并且它认为不需要“if”。这样它只是一个警告而不是错误。
为了避免它,你可以这样做:
#define inDebugMode 1
//some code
#if inDebugMode
//your code you only want to run in debug
#endif
这样,如果您不调试“#if”部分中的所有代码,预编译器将省略,编译器不会有问题。
如果您不喜欢预处理器指令并且想使用 const bool,那么您可以直接禁用“警告 C4127”(项目属性/C/C++/高级/禁用特定警告/输入“4127”)。