在了解代码的编译过程前我们先了解一下IDE
1,集成开发环境(IDE)
由于我们编写的C代码要经过预处理、编译、汇编和链接才能成为机器可以运行的可执行程序,而使用IDE可以略过这些步骤,因为IDE的运行按钮已经帮你实现这一切了。比如VS(visual studio)、eclipse、gcc,功能强大,值得一提的是VS是付费的,eclipse开源免费,所以使用eclipse开发还不需要切换操作系统。
所以,现在你知道自己敲的代码要变为可执行文件并不是那么简单了,只是你电脑上的集成开发环境功能太过强大,结下来我们一起来了解整个过程。
2,我们以这里以Linux下的gcc过程为例
gcc test.c- -o test
从.c文件到可执行的.out文件,经过了预处理,编译,汇编,连接四个过程:
预处理:
gcc -E test.c -o test.i //-E预处理后退出;-o指定文件名
预处理就是将头文件(#include)与宏(#define)加入到.c中去。
编译:
gcc -S test.i -o test.s //同上,-S表示执行编译后就停止
编译过程会生成汇编文件.S,用过keil的小伙伴应该接触过汇编语言,这里给大家截取一段.S文件
可以看出来,汇编指令直接对CPU的寄存器进行操作。
汇编:
gcc -c test.s -o test.o //同上,-C表示执行到汇编退出
经过汇编过程后,.s文件就变成了机器能识别的二进制文件,也就是目标文件(.o).
连接:
gcc test.o -o test.out //test等同于test.out,是可执行文件
连接过程就是在目标文件的基础上,加入库文件和启动文件等生成的可执行文件。
我相信到这里大家应该对代码的编译过程有很清楚的认知了,尽管现在集成编译环境功能强大,我们也应该掌握最底层的原理。