我以爲cpp foo.c
和gcc -E foo.c
都以同樣的方式對源文件進行預處理,但是我得到的輸出對於同一個文件是不同的。cpp和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);
結果爲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;
$
結果爲gcc -E
和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;
$
爲什麼這些產出不同,哪一個我應該使用時,我想看到的預處理源?
原始代碼here
我剛試過這個。我的'cpp'版本產生與'gcc -E'相同的輸出。和你的'gcc'輸出一樣。 – selbie
與'gcc -E foo.c'一樣,'cpp foo.c'的結果也一樣。你可以將'cpp -v foo.c'的輸出粘貼到問題中嗎? –
如果我使用'--traditional-cpp'作爲cpp的命令行參數,我會得到和你一樣的輸出。看起來喜歡有人已經確定這是一個可能的答案。 – selbie