Wie ein definiert bei Kommandozeilen mit gcc undefine

stimmen
32

Wie kompiliere ich zum Zeitpunkt undefine einen Compiler Makro mit gcc. Ich habe versucht, einige der Kompilierung args wie -D gcc, aber ich kann nicht die „nicht definiert“ -Meldung zu sehen bekommen.

Vielen Dank

#include <iostream>

#define MYDEF


int main(){
#ifdef MYDEF
  std::cout<<defined\n;
#else
  std::cout<<not defined\n;
#endif

}
Veröffentlicht am 30/12/2009 um 01:48
quelle vom benutzer
In anderen Sprachen...                            


6 antworten

stimmen
9

http://gcc.gnu.org/onlinedocs/gcc-4.4.2/gcc/Preprocessor-Options.html#Preprocessor-Options

Die -UOptionen schien , was man benötigt hätte ... aber dann wieder kann man nicht eine Definition im Quellcode enthalten außer Kraft setzen , ohne Richtlinien zu mehr Präprozessor greifen zu müssen .

Beantwortet am 30/12/2009 um 01:52
quelle vom benutzer

stimmen
39

Sie können die Option -U mit gcc verwenden, aber es wird kein Makro definiert in Ihrem Quellcode aufgehoben werden sollen. Soweit ich weiß, gibt es keine Möglichkeit, das zu tun.

Beantwortet am 30/12/2009 um 01:52
quelle vom benutzer

stimmen
1

Der Code Anwendungsfall ist nicht richtig. Wie ich sehe, haben Sie hart codiert #definein der Datei. Wenn Compiler zunächst davon ausgegangen , MYDEFnicht definiert, wird es definieren , sobald es die Verarbeitung der Datei zu starten.

Sie sollten die Zeile entfernen #define MYDEF. Und ich hoffe , Ihr Testfall wird funktionieren, wenn Sie passieren MYDEFzu -Dund -U.

Beantwortet am 19/07/2012 um 09:53
quelle vom benutzer

stimmen
11

Sie sollten die einwickeln MYDEFDefinition in einem Präprozessormakro, dessen Gegenwart (in der Befehlszeile definiert) würde dann MYDEF verhindern , definiert ist. Ein bisschen gewunden um sicher zu sein , aber Sie können dann den Build in der Art und Weise steuern Sie über die Befehlszeile (oder Makefile) möchten. Beispiel:

#ifndef DONT_DEFINE_MYDEF
#define MYDEF
#endif

Dann von der Befehlszeile, wenn Sie nicht wollen, MYDEF:

gcc -DDONT_DEFINE_MYDEF ...

Beantwortet am 23/09/2012 um 22:23
quelle vom benutzer

stimmen
1

Sie können zum Filtern von Quellcode zurückgreifen und diese zurück zu gcc zum Kompilieren geben, wie dieser Pseudocode:

grep -v "define MYDEF" yourFile.c | gcc -o yourFile.o -xc -

Ich hoffe es hilft.

Beantwortet am 16/05/2013 um 15:00
quelle vom benutzer

stimmen
0

Hier ist eine Möglichkeit, die nicht vollständig Ihren Anwendungsfall erstreckt sich das aber fand ich in meinem Fall hilfreich sein.

Wenn Ihr MYDEFin einem separaten Header - Datei #defined wurden aus der C - Datei #include könnten Sie die Definition des Makros # include guard zwingen mit der -DOption (so die Verhinderung MYDEF#definition) dann entweder aktiv #define (noch mit der -DOption) MYDEFzu etwas anderes oder es einfach nicht definiert verlassen.

Es ist klar, dass alles andere in der Header-Datei definiert auch fehlen würde, aber das war für mich eine Lösung gezwungenermaßen ein Makro undefine, ohne den Code von Drittanbietern zu ändern.

Beantwortet am 16/06/2015 um 07:12
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more