Tôi nghĩ rằng cả hai cpp foo.c
và gcc -E foo.c
làm tiền xử lý tệp nguồn theo cùng một cách, nhưng tôi nhận được kết quả của chúng khác nhau cho cùng một tệp.Sự khác biệt giữa cpp và 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);
Kết quả cho 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;
$
Kết quả cho gcc -E
và cho 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;
$
Tại sao những kết quả đầu ra khác nhau, và cái nào tôi nên sử dụng khi tôi muốn xem nguồn tiền xử lý?
đang Original here
Tôi vừa thử điều này. Phiên bản 'cpp' của tôi tạo ra đầu ra giống hệt như' gcc -E'. Giống như đầu ra 'gcc' của bạn. – selbie
Tôi nhận được kết quả tương tự với 'cpp foo.c' như với' gcc -E foo.c'. Bạn có thể dán đầu ra của 'cpp -v foo.c' vào câu hỏi không? –
Nếu tôi sử dụng '--traditional-cpp' như một tham số dòng lệnh để cpp, tôi nhận được kết quả tương tự như của bạn. Có vẻ như ai đó đã xác định đó là câu trả lời có khả năng. – selbie