Myślałem, że zarówno cpp foo.c
i gcc -E foo.c
do preprocess pliku źródłowego w ten sam sposób, ale mam ich dane wyjściowe różnią się dla tego samego pliku.Różnica między cpp i 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);
Wynik dla 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;
$
Wynik dla gcc -E
i 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;
$
Dlaczego te wyjścia są różne, i które należy użyć, gdy chcę zobaczyć wstępnie przetworzone źródło?
kod oryginalny here
Po prostu próbowałem tego. Moja wersja 'cpp' daje identyczne wyjście jak' gcc -E'. To samo, co wyjście 'gcc'. – selbie
Otrzymuję takie same wyniki z 'cpp foo.c' jak z' gcc -E foo.c'. Czy możesz wkleić dane wyjściowe z 'cpp -v foo.c' do pytania? –
Jeśli użyję '--traditional-cpp' jako parametru wiersza poleceń do cpp, otrzymam taki sam wynik jak twój. Wygląda na to, że ktoś już to rozpoznał jako prawdopodobną odpowiedź. – selbie