2013-07-31 17 views
7

devo parte di codice come di seguito:non #ifdef funziona come previsto con le intestazioni precompilate

#define FEATURE_A 1 

void function() 
{ 
// some code 

#ifdef FEATURE_A 
    // code to be executed when this feature is defined 
#endif 

// some code 

} 

Il programma non eseguire codice all'interno #ifdef - #endif. Ma quando cambio #ifdef a #ifndef e rimuovi la macro #define, il codice viene eseguito. Il codice seguente funziona come previsto.

//#define FEATURE_A 1 

void function() 
{ 
// some code 

#ifndef FEATURE_A 
    // code to be executed when this feature is defined 
#endif 

// some code 

} 

Qualcuno può spiegare il motivo per cui nel primo codice caso all'interno #ifdef - #endif non eseguito e nel secondo caso funziona? Qualcuno può dirmi quale impostazione potrebbe essere sbagliata?

Non sono sicuro se questa materia, sto usando Visual Studio 2010.

Grazie in anticipo

UPDATE: Quando ho pulito e ri-run, il secondo, inoltre, non lavora. il suo unico show in editor come codice che abilita.

Quando definisco macro in progetto-> proprietà-> Proprietà di configurazione-> c/C++ -> Preprocessore, entrambi funzionano bene.

+1

Sei sicuro che non si dispone di 'FEATURE_A' #undef da qualche parte? – mvp

+1

Se si desidera vedere il codice dopo la preelaborazione compilare con il flag '-E' – aaronman

+0

È necessario pubblicare un intero programma che presenti questo comportamento, poiché altrimenti non ha alcun senso. –

risposta

10

È probabile a causa del modo in cui Microsoft implementa le intestazioni precompilate. In realtà hanno

#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 

} 

Sposta dopo intestazione precompilata e tutte le opere:

#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 

} 
+0

Grazie mille. il suo lavoro è magico :) –

Problemi correlati