【思考】

  1. 对编程而言,可移植性意味着什么?
  2. 解释源代码文件、目标代码文件和可执行文件有什么区别?
  3. 编程的7个主要步骤是什么?
  4. 编译器的任务是什么?
  5. 链接器的任务是什么?

    【原文解答】

  6. 这意味着,在一种系统中编写的 C程序稍作修改或不修改就能在其他系统运行

  7. image.png

    • 目标文件和可执行文件都由机器语言指令组成的。然而,目标文件中只包含编译器为你编写的代码翻译的机器语言代码,可执行文件中还包含你编写的程序中使用的库函数和启动代码的机器代码。在有些系统中,必须分别运行编译程序和链接程序,而在另一些系统中,编译器会自动启动链接器,用户只需给出编译命令即可。
    • 把源代码转换为机器语言代码,并把结果放在目标代码文件(或简称目标文件)中(这里假设源代码只有一个文件)。虽然目标文件中包含机器语言代码,但是并不能直接运行该文件。因为目标文件中储存的是编译器翻译的源代码,这还不是一个完整的程序。
    • 目标代码文件缺失启动代码(startup code)。启动代码充当着程序和操作系统之间的接口。例如,可以在MS Windows或Linux系统下运行IBM PC兼容机。这两种情况所使用的硬件相同,所以目标代码相同,但是Windows和Linux所需的启动代码不同,因为这些系统处理程序的方式不同。目标代码还缺少库函数。几乎所有的C程序都要使用C标准库中的函数。例如,concrete.c中就使用了 printf()函数。目标代码文件并不包含该函数的代码,它只包含了使用 printf()函数的指令。printf()函数真正的代码储存在另一个被称为库的文件中。库文件中有许多函数的目标代码。
  8. 编程的七大步骤

    image.png

  9. 编译器把源代码转换成中间代码,链接器把中间代码和其他代码合并,生成可执行文件。

【个人理解】

  1. 编程具有可移植性,能大大增加代码的复用性,任何一门强大的语言都应跨平台,这才能服务更多的用户。

    • 源文件就是我们自行编写的文件面向的是人
    • 目标文件是将源文件转换成机器代码,面向的是机器,但目标文件不完善,需要其他文件的辅助才能运行
    • 可执行文件是计算机能直接识别并运行的文件