1.2.1 从源程序到可执行程序

Hello World的基础知识

扫描上方二维码可观看知识点讲解视频

以下是hello.c的C语言源程序代码。

为了让计算机能执行上述应用程序,程序员应按照以下步骤进行处理。

1)通过程序编辑软件得到hello.c文件。hello.c在计算机中以ASCII字符方式存放,如图1-2所示,图中给出了每个字符对应的ASCII码的十进制值,例如:第一个字节的值是35,代表字符#;第二个字节的值是105,代表字符i;最后一个字节的值是125,代表字符}。通常把用ASCII码字符或汉字字符表示的文件称为文本文件(Text File),源程序文件都是文本文件,是可显示和可读的。

图1-2 hello.c源程序文件在计算机中的存放方式

2)将hello.c进行预处理、编译、汇编和链接,最终生成可执行目标文件。例如,在UNIX系统中,可用GCC编译驱动程序进行处理,命令如下:

上述命令中,最前面的unix>为shell命令行解释器的命令行提示符,gcc为GCC编译驱动程序名,-o表示后面为输出文件名,hello.c为要处理的源程序。从hello.c源程序文件到可执行目标文件hello的转换过程如图1-3所示。

• 预处理阶段:预处理程序(cpp)对源程序中以字符“#”开头的命令进行处理,例如,将#include命令后面的.h文件内容嵌入源程序文件中。预处理程序的输出结果还是一个源程序文件,以.i为扩展名。

• 编译阶段:编译程序(ccl)对预处理后的源程序进行编译,生成一个汇编语言源程序文件,以.s为扩展名,例如,hello. s是一个汇编语言程序文件。因为汇编语言与具体的机器结构有关,所以,对同一台机器来说,不管使用哪种高级语言,编译转换后的输出结果使用的都是同一种汇编语言。

• 汇编阶段:汇编程序(as)对汇编语言源程序进行汇编,生成一个可重定位目标文件(Relocatable Object File),以.o为扩展名,例如,hello.o是一个可重定位目标文件。它是一种二进制文件(Binary File),因为其中的代码是机器指令,数据以及其他信息也都是用二进制表示的,所以它是不可读的,用文本方式打开的时候会显示乱码。

Hello World程序的存储与编译

扫描上方二维码可观看知识点讲解视频

• 链接阶段:链接程序(ld)将多个可重定位目标文件和标准库函数合并为一个可执行目标文件(Executable Object File),可执行目标文件可简称为可执行文件。本例中,链接程序将hello.o和标准库函数printf所在的可重定位目标模块printf.o进行合并,生成可执行文件hello。

图1-3 从hello.c源程序文件到可执行目标文件hello的转换过程

最终生成的可执行文件被保存在磁盘上,可以通过某种方式启动磁盘上的可执行文件运行。