2016-09-20 2 views
-1

Ich habe ein Problem, das einfach zu lösen ist.Zeile aus Kompilierung über Makro C++ ausschließen

Ich habe Code wie folgt aus:

#define _MG_ALL //This might be defined in some other headerfile 

#ifndef _MG_ALL 
#define MG_ALL <?????> 
#else 
#define MG_ALL <nothing> 
#endif 

Im Code es wie folgt verwendet:

ALL foo = thisIsSomeFunc(foo); 

Diese Zeile wird nur kompiliert werden sollte, wenn _ALL definiert ist. Dies könnte auch gelöst werden, indem man dies verwendet:

#ifdef ALL 
    foo = thisIsSomeFunc(int foo); 
#endif 

Aber ich würde nur ein kurzes Makro in der gleichen Zeile bevorzugen.

+1

Konnten Sie die Linie nicht einfach auskommentieren? '#define ALL //' – muXXmit2X

+0

@ muXXmit2X Ich habe das versucht, aber es hat nicht funktioniert. – MaestroGlanz

+0

Ich habe gerade [hier] (http://stackoverflow.com/q/1510869/4711812) gelesen, dass Kommentar-Stripping durchgeführt wird, bevor Makroexpansion ausgeführt wird ... – muXXmit2X

Antwort

2

Was Sie tun können, ist die Definition der Makro wie folgt:

#ifdef _ALL 
#define ALL if(1) 
#else 
#define ALL if(0) 
#endif 

Wenn Sie es auf diese verwenden wird es Code ähnlich wie diese

ALL std::cout << "Debug Message" << std::endl; 
==> if(1) std::cout << "Debug Message" << std::endl; 

Ein guter Compiler erzeugen sollte den konstanten Wert erkennen in die if-statement und sollte nur den rechten Teil kompilieren (1 ==> if part, 0 ==> nothing).

Verwandte Themen