Ich benutze GCC, um einige C-Dateien vorzuverarbeiten.GCC Preprocessing: Belassen undefined Konditional ohne Null-Werte
Examplesource:
#define A 1
#define B 0
#if A && B > 0
bla()
#else
#if C == 0
foo()
#else
foo2()
#endif
foo3()
#endif
ich dies von einer Batch-Datei renne die Kommentare (-CC
) und funktioniert nicht durch Makros (-fdirectives-only
) läßt: die folgende Ausgabe
gcc -E -CC -fdirectives-only -Wundef infile.c > outfile.c
Es gibt mir für das obige Beispiel, weil es automatisch C = 0 annimmt:
Ich würde wollen die folgende Ausgabe (keine Annahmen von GCC genommen):
#if C == 0
foo()
#else
foo2()
#endif
foo3()
Gibt es eine Möglichkeit, das zu tun? Ich weiß, das ist nur so, wie die GCC SOLLTE funktionieren, aber vielleicht durch einige manuelle Arbeit könnte es getan werden - haben Sie eine Idee?
Ich weiß, die alternative Coan wäre dies möglich machen - aber ich bin nicht :-(
Vielen Dank im Voraus benutzen dürfen
Tut mir leid, ich meinte TO # definieren Sie eine & B. EDITED MEINE QUELLE
Vorverarbeitungszeilen werden verarbeitet, bevor eine der anderen Quellen kompiliert wird. Die 'A' und' B' in '#if A && B> 0' haben nichts mit Quellzeilen 'A = 1' oder' B = 0' zu tun. Namen, die nicht '# define'd sind, werden für die Präprozessorarithmetik durch '0' ersetzt. –
Ihre Eingabe und Ihre Ausgabe stimmen nicht überein. Ich vermute einen Kopier-/Einfügefehler. – gnasher729
Nur was ist 'A = 1' und' B = 0'? Es ist nicht gültig C. – Lundin