Ich habe ein C-Programm mit vielen Optimierungen, die mit #define
s aktiviert oder deaktiviert werden können. Wenn ich mein Programm starte, würde ich gerne wissen, welche Makros zur Kompilierzeit definiert wurden.
Ich versuche also, eine Makrofunktion zu schreiben, um den tatsächlichen Wert eines Makros zu drucken. Etwas wie das:
%Vor%Aber ich weiß nicht, wie ich es zum Laufen bringen kann und ich vermute, dass das nicht möglich ist, hat jemand eine Idee, wie es geht?
(Beachten Sie, dass dies kompiliert werden muss, auch wenn das Makro nicht definiert ist!)
Das Schreiben eines MACRO, das zu einem anderen MACRO expandiert, würde erfordern, dass der Präprozessor zweimal darauf läuft.
Das ist nicht getan.
Sie könnten eine einfache Datei schreiben,
%Vor% Verwenden Sie für diese Datei dieselben Kompilierzeit-Definitionszeilen wie für die anderen Dateien.
Rufen Sie die Funktion irgendwann beim Start auf.
Wenn Sie die #DEFINE
-Linien in einer Quelldatei und nicht in Makefile
,
haben
Verschieben Sie sie in eine andere Header
-Datei und fügen Sie diesen Header allen Quelldateien,
hinzu
einschließlich dieser check-defines.c
.
Hoffentlich haben Sie für alle Ihre Quelldateien dieselben Definitionen Andernfalls wäre es ratsam, die Strategie Ihrer Defines erneut zu überprüfen.
Um die Generierung dieser Funktion zu automatisieren Sie könnten die M4 Makrosprache (oder sogar ein AWK Skript ). M4 wird zu Ihrem Pre-Pre-Prozessor.
Sie haben den von Ihnen verwendeten Compiler nicht angegeben. Wenn dies gcc ist, kann gcc -E helfen Sie stoppt nach der Vorverarbeitung und druckt das Vorverarbeitungsergebnis. Wenn Sie ein gcc -E-Ergebnis mit der Originaldatei vergleichen, erhalten Sie möglicherweise einen Teil von dem, was Sie wollen.
Wave-Bibliothek von Boost kann sein hilfreich auch zu tun, was Sie wollen. Wenn Ihr Projekt groß genug ist, denke ich, dass es einen Versuch wert ist. Es ist ein C ++ - Präprozessor, aber sie sind immer gleich:)
Es ist tatsächlich nicht möglich, das Problem ist der "nicht definierte" Teil. Wenn Sie sich auf die Makrowerte verlassen haben, um Teile Ihres Codes zu aktivieren / deaktivieren, können Sie einfach Folgendes tun:
%Vor%Diese Frage ist sehr nahe von Macro, das druckt ein Ausdruck und wertet ihn aus (mit __STRING) . Chrisharris 'Antwort ist sehr nahe bei der Antwort auf die vorherige Frage.
Sie können eine Integer-Variable verwenden, die mit 1 initialisiert ist. Multiplizieren Sie das #define mit dieser Variablen und drucken Sie den Wert der Variablen.
Tags und Links c c-preprocessor