Ich dachte, dass sowohl cpp foo.c
und gcc -E foo.c
die Quelldatei auf die gleiche Weise vorverarbeiten, aber ich habe ihre Ausgabe für die gleiche Datei zu unterscheiden.Unterschied zwischen cpp und gcc -E
$ cat foo.c
#define VARIABLE 3
#define PASTER(x,y) x ## _ ## y
#define EVALUATOR(x,y) PASTER(x,y)
#define NAME(fun) EVALUATOR(fun, VARIABLE)
extern void NAME(mine);
Ergebnis für cpp
:
$ cpp foo.c
# 1 "foo.c"
# 1 "<built-in>" 1
# 1 "<built-in>" 3
# 329 "<built-in>" 3
# 1 "<command line>" 1
# 1 "<built-in>" 2
# 1 "foo.c" 2
extern void mine ## _ ## 3;
$
Ergebnis für gcc -E
und für clang -E
:
$ gcc -E foo.c
# 1 "foo.c"
# 1 "<built-in>" 1
# 1 "<built-in>" 3
# 330 "<built-in>" 3
# 1 "<command line>" 1
# 1 "<built-in>" 2
# 1 "foo.c" 2
extern void mine_3;
$
Warum diese Ausgänge unterscheiden und welche sollte ich verwenden, wenn ich das sehen wollen vorverarbeitete Quelle?
Originalcode here
Ich habe es gerade versucht. Meine Version von 'cpp' erzeugt eine identische Ausgabe wie' gcc -E '. Genau wie Ihre 'gcc' Ausgabe. – selbie
Ich bekomme die gleichen Ergebnisse mit 'cpp foo.c' wie mit' gcc -E foo.c'. Kannst du die Ausgabe von 'cpp -v foo.c' in die Frage einfügen? –
Wenn ich '--traditional-cpp' als Befehlszeilenparameter für cpp verwende, erhalte ich die gleiche Ausgabe wie deine. Sieht so aus, als hätte jemand das bereits als mögliche Antwort identifiziert. – selbie