了解编译器的工作原理



我正在学习C++编程语言,我对编译器如何创建可执行文件有疑问。我的书上说:

C++是一种编译语言,因此您需要翻译计算机可以执行的文件中的源代码。这个文件是由编译器生成的,它被称为目标代码(.obj),但像helloworld程序这样的程序是由我们编写的一部分和C++库的一部分组成的。

你好世界节目中的这一部分是什么?

然后我的书上写着:

必须编译并链接程序的两个部分才能生成可执行文件。

这是否意味着可执行文件是链接程序的两个部分的结果,并且目标代码无法执行?

这两部分是1)"调用print函数并传入字符串的代码",这是您编译的hello-world程序;2) 实现打印功能的代码(比如"std::cout<<")。我们称之为标准库。

显然,如果没有标准的库对象文件,您就无法获得完整的可执行文件,因为缺少std::cout的实现。

标准库的原因之一是为了让用户代码(你好世界文件)在不同的操作系统之间更容易移植,因为在Unix系统中,你实际上必须使用"写"函数来打印字符串;但在其他系统中,您可以使用除"写入"之外的其他功能。标准库为您统一了它。

关于标准库对象文件的详细信息包括诸如模板实例化之类的技术,您现在可能对此不感兴趣。

必须编译C和C++。您将使用一个编译器,将您的代码转换为特定于平台的可执行文件。

编译器执行许多步骤:

  • 代码首先经过预处理(用宏的值替换宏(#define),用宏的内容替换include文件(#include)
  • 语法分析以检查C++语法是否有效
  • 语义分析构建指令树
  • 优化(如有要求)
  • 代码生成:它编写特定于目标平台的汇编代码
  • 链接:将所有代码放在一个可执行程序中

至少,这是我在学校学到的东西。。。。

没错:C和C++都有单独的编译和链接步骤。源代码被编译为该特定处理器的目标代码。对象文件和库链接在一起,然后执行。

Java和C#都使用由各自的虚拟机解释和执行的字节码。

最新更新