写完了神级入门程序,在运行程序前,稍稍了解了一下编程机制。(暂时还不知道具体用处,就是觉得高大上)
我练习编程使用的是VS2019,还用虚拟机装了一个CentOS操作系统,用于了解Linux环境。
了解编译步骤是在虚拟机中进行的,感觉手打命令简单一点。(VS各种功能太多了,目前只用了【调试】【运行】两个按钮。)
咱们编写的程序代码都被保存在一种文本文件中,被称为源代码文件,简称源文件。
C程序源文件的文件名以 .c 作为后缀,比如:hello.c
单独的源代码文件只有咱们编写的程序代码,是无法被执行的,需要通过编译器的处理才能编程可执行文件。
编译器:是将高级语言编写的程序翻译成计算机能了解的机器语言指令集的程序。
注意:编译器是一个程序!!!
具体编译过程为可分为四步:
1、预处理命令为:gcc -E 源文件名.c -o 预处理文件名.i
注意:得到的预处理文件必须以 .i 结尾
例子:
gcc -E hello.c -o hello.i
预处理在前一篇文章中提了一嘴,在编译器编译程序之前进行,对程序 进行一些准备工作。
这些准备工作包括:
1)引入头文件
2)替换宏定义
3)执行条件代码
4)删除注释
这个阶段不会检查语法错误。
2、编译命令为:gcc -S 预处理文件名.i -o 汇编文件名.s
例子:
gcc -S hello.i -o hello.s
预处理文件中的代码翻译成汇编指令
这个阶段会逐行检查语法错误
这个步骤之后,懂汇编语言的还是可以看懂文件内容的
3、汇编命令为:gcc -c 汇编文件名.s -o 二进制文件名.o
例子
gcc -c hello.s -o hello.o
这个阶段会将汇编文件翻译成二进制文件,文件内容通篇都是二进制序列。
到这步为止,我们可以将得到的文件成为目标代码文件
4、链接命令为:gcc hello.o -o hello
例子
gcc hello.o -o hello
这一阶段是由一个叫链接器程序执行的。在通常情况下,编译器运行链接器。
连接器会将目标代码文件、操作系统的启动代码(不同的操作系统,拥有不同的启动代码),以及库代码(包含了你在程序用使用的库函数的具体代码)三者结合在一起,形成可执行文件。
上面四条命名都用到了一个参数 -o,这个参数的作用是定制目标文件的名称。
其中,前三条命令的目标文件名hello.i、hello.s、hello.o的名字可以随便写,但后缀是不可以随便写的。
在Linux系统中,第四条命令生成的可执行文件的名称定义比较自由,因为Linux系统好像对于可执行文件名没有后缀要求???
但在Windows系统下,执行第四条命令后,会自动生成后缀为.exe可执行文件
编译4步骤也不是必须逐条执行的,也可以省略中间的一些步骤
gcc hello.c -o hello //一步到位 gcc -S hello.c -o hello.s //诸如此类,可以省略中间步骤 gcc hello.i -o hello //也可以这么写,但在这一步之前,别忘了执行预处理命令



