Gcc编译管道:如何获取抽象语法树?

Gcc编译管道:如何获取抽象语法树?,gcc,compilation,tree,clang,grammar,Gcc,Compilation,Tree,Clang,Grammar,我提到了gcc编译过程,它是这样的,我有一个f.c文件: 编译管道如下所示: cat f.c #include<stdio.h> void f(){printf("hello %d\n",1);} 所以在处理它的过程中,我首先得到一个非常低级的.s(assmebly)文件,然后是对象文件格式(与平台无关?)。我想知道.obj文件是否在较低的级别,然后是程序集描述的代码 我的问题: i) 哪一步称为“代码生成”,第2步获得f.s,或第3步获得f.o ii)clang构建在llvm之上

我提到了gcc编译过程,它是这样的,我有一个f.c文件: 编译管道如下所示:

cat f.c
#include<stdio.h>
void f(){printf("hello %d\n",1);}
所以在处理它的过程中,我首先得到一个非常低级的.s(assmebly)文件,然后是对象文件格式(与平台无关?)。我想知道.obj文件是否在较低的级别,然后是程序集描述的代码

我的问题:

i) 哪一步称为“代码生成”,第2步获得f.s,或第3步获得f.o


ii)clang构建在llvm之上,llvm为编译的语法树提供了通用格式。如果我使用clang编译我的f.c,如何获得包含抽象语法树编译结果的文件?需要任何命令行选项或配置吗?

没有任何评论就投票否决是不公平的没有任何评论就投票否决是不公平的
1. cpp f.c f.i --> I get f.i file, all include and macros expanded.
2. gcc -S f.i  --> Compile this .i file, and get an assembly code file.
3. gcc -c f.s  --> compile into an .o file, this is in a standard format.
4. gcc f.o -o f--> Get executable.