나는 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;
$
왜 그 출력은 다릅니 까, 어느 내가보고 싶을 때 하나를 사용해야합니까 전처리 된 소스? gcc -E
가 -traditional-cpp
을 제거 할 것
원래 코드는 here
방금 시도했습니다. 내 버전의'cpp'는'gcc -E'와 동일한 결과물을 만들어냅니다. gcc 출력과 동일합니다. – selbie
나는'gcc -E foo.c'와 마찬가지로'cpp foo.c'와 같은 결과를 얻었습니다. 'cpp -v foo.c'의 결과를 질문에 붙여 넣을 수 있습니까? –
만약'--traditional-cpp'를 cpp의 명령 행 매개 변수로 사용한다면, 나는 당신과 같은 출력을 얻습니다. 보이는 사람은 이미 그 사람을 가능성있는 대답으로 식별하는 것을 좋아합니다. – selbie