2016-06-21 21 views
-1

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

+0

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. –

+0

Ihre Eingabe und Ihre Ausgabe stimmen nicht überein. Ich vermute einen Kopier-/Einfügefehler. – gnasher729

+0

Nur was ist 'A = 1' und' B = 0'? Es ist nicht gültig C. – Lundin

Antwort

1

Nein, es gibt keine Möglichkeit, diese Anwendung ohne irgendeine Dritt zu tun. Weder GCC noch Klirren umfassen diese Funktionalität, daher gibt es Tools von Drittanbietern.