我有一些代码如下:
#define FEATURE_A 1
void function()
{
// some code
#ifdef FEATURE_A
// code to be executed when this feature is defined
#endif
// some code
}
该程序不会在 #ifdef - #endif 中执行代码。但是当我将 #ifdef 更改为 #ifndef 并删除 #define 宏时,代码就会被执行。下面的代码按预期工作。
//#define FEATURE_A 1
void function()
{
// some code
#ifndef FEATURE_A
// code to be executed when this feature is defined
#endif
// some code
}
有人可以解释为什么在第一种情况下 #ifdef - #endif 中的代码没有被执行,在第二种情况下它可以工作吗?谁能告诉我哪种设置可能有问题?
不确定是否这件事,我正在使用visual studio 2010。
提前致谢
更新: 当我清理并重新运行时,第二个也无法正常工作。它只在编辑器中显示为启用的代码。
当我在project-> property-> Configuration Properties->中定义宏时c / c ++ - >预处理器,它们都工作正常。
答案 0 :(得分:10)
可能是因为Microsoft实现了预编译头文件。你实际上有
#define FEATURE_A 1
#include "stdafx.h" // <- all code even ascii art before that line is ignored.
void function()
{
// some code
#ifdef FEATURE_A
// code to be executed when this feature is defined
#endif
// some code
}
在预编译的标题之后移动它并且所有工作:
#include "stdafx.h" // <- all code even ascii art before that line is ignored.
#define FEATURE_A 1
void function()
{
// some code
#ifdef FEATURE_A
// code to be executed when this feature is defined
#endif
// some code
}
答案 1 :(得分:0)