#ifdef与预编译头文件无法正常工作

时间:2013-07-31 04:06:38

标签: c++ macros

我有一些代码如下:

#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 ++ - >预处理器,它们都工作正常。

2 个答案:

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

就我而言,我有多个 Platform,因此我需要为每个 Preprocessor 定义 Platform

enter image description here