从直观角度而言,编译器就是将高级语言翻译成机器语言(二进制)的一个工具。
C语言之经典“Hello World"可会写?入关第一天的挑战,相信大家已经可以信手拈来,那么你已经和我一样离成功不远了。
#include<stdio.h>
int main()
{
printf("Hello World\n");
return 0;
}
Linux下,我们可以用gcc一步就可生成可执行文件,事实上它是分为以下四部处理的。
1.预处理:生成.i文件(-E表示只进行预编译)
gcc -E main.c -o main.i
2.编译:生成.s文件
gcc -S main.i -o main.s
3.汇编:生成.o文件,即可重定位的二进制文件
gcc -C main.s -o main.i
4.链接:生成可执行的elf格式文件
gcc main.c -o main
那么我们再从代码角度分析一下它的处理过程:
预处理阶段
1.删除所有"#define",并展开宏定义。
2.处理所有预编译指令,如"#if" 、"#endif"等。
3.处理"#include"指令,过程是递归处理的。
4.删除所有的