首先我们写了一个main.c的程序,点击执行的时候 ,会有四个步骤,分别是预编译/预处理,编译,转汇编,链接。
首先是预编译,也叫预处理,我们在vs code上演示一下,使用命令 gcc main.c -E -o main.i
gcc 是编译器 main.c是你要编译的文件名字 —E是编译到预处理就停止的指令,-o是指定输出为一个文件,后面加文件名,ls是把文件夹里面的文件都显示出来,这时候会发现多了一个main.i文件,这是我们通过指令生成的一个运行到预处理就停止的文件,我们可以看到,我们只写了几行代码,但是生成的.i文件,却有几百行代码,这是因为,我们包含了一个头文件,stdio.h,在预处理,把头文件全部包含进来,注释也会被删除,宏也会全部替换。
这是预处理的大概。
接下来到了编译,我们用命令 gcc main.i -S 会生成一个main.s的文件,这个命令是让编译器,运行到编译这个步骤就停下来,编译这个步骤,是把我们写的C语言代码转换成汇编代码,他会进行语法分析,词法分析,符号汇总,语义分析,非常复杂,想详细了解的可以去看一本书,《程序员的自我修养》。
接下来是到了汇编步骤,这一步是把汇编代码转二进制,我们用命令 gcc main.s -c 生成了test.o文件