2013-07-31 7 views
7

I wie unten Teil des Codes haben:#ifdef nicht funktioniert wie mit vorkompilierte Header erwartet

#define FEATURE_A 1 

void function() 
{ 
// some code 

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

// some code 

} 

das Programm nicht Code innerhalb #ifdef ausführen - #endif. Aber wenn ich #ifdef zu #ifndef ändern und #define Makro entfernen, wird der Code ausgeführt. Der folgende Code funktioniert wie erwartet.

//#define FEATURE_A 1 

void function() 
{ 
// some code 

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

// some code 

} 

Kann mir jemand erklären, warum im ersten Fall Code innerhalb #ifdef - #endif nicht in zweiten Fall ausgeführt und es? Kann mir jemand sagen, welche Einstellung falsch sein könnte?

Nicht, wenn diese Frage sicher, ich bin mit Visual Studio 2010.

Vielen Dank im Voraus

UPDATE: Wenn ich sauber und re-run, der zweite auch nicht funktioniert. es wird nur im Editor als Code angezeigt, der aktiviert wurde.

Wenn ich Makro in Projekt-> Eigenschaft-> Konfiguration Eigenschaften-> C/C++ -> Präprozessor definieren, funktionieren beide gut.

+1

sind Sie sicher, dass Sie nicht 'irgendwo #undef FEATURE_A' haben? – mvp

+1

Wenn Sie den Code nach der Vorverarbeitung sehen möchten, kompilieren Sie mit dem '-E' Flag – aaronman

+0

Sie müssen ein ganzes Programm veröffentlichen, das dieses Verhalten aufweist, da es sonst keinen Sinn macht. –

Antwort

10

Es ist wahrscheinlich, weil Microsoft vorkompilierte Header implementiert. Sie haben tatsächlich

#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 

} 

Move it nach vorkompilierte Header und alle Werke:

#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

Vielen Dank. seine Arbeit magisch :) –

Verwandte Themen