c++ - 预处理器、汇编器和链接器是编译器的一部分吗?

标签 c++ c assembly linker

所以我被教导,就像我们许多人一样,编译器是一个将人类可读代码转换为机器可读代码的程序。然而,你越深入地研究它,你就会发现“编译过程”实际上分为 4 个不同的部分:预处理器、编译器、汇编器和链接器。我认为不了解所有这些部分的位置让我有点困惑。

  1. 是否在典型的编译过程中描述了所有步骤? 编译器程序?
  2. 或者像汇编器和链接器这样的独立程序构建 与编译器一起进入 IDE 以生成代码?
  3. 它是否取决于编译器或编程语言?
  4. 如果分开,编译器是否只负责汇编代码 创建和优化汇编代码?

最佳答案

Are all the steps described in a typical compilation process part of the compiler program?

翻译过程需要所有步骤。该过程包括预处理、编译、汇编/机器代码指令生成和生成可执行文件(例如链接)。

翻译程序,也称为编译器,不需要将所有步骤放入一个编译器可执行文件中。

例如,一个程序可能由多个翻译单元组成,因此可以一次编译它们,然后将各个部分链接在一起。通常将编译与链接分开是有益的。

Or are things like the assembler and linker separate programs built into IDE's along with compilers to generate code?

一些 IDE,如 Eclipse,没有内置的编译器或链接器。 Eclipse IDE 旨在与各种编译器和链接器一起工作。 Eclipse IDE 需要配置,以了解在构建程序时将使用哪些工具。

Does it depend on the compiler or programming language?

IDE 通常独立于编译器和语言。 NetBeans IDE 可以与 Java 或 C++(与 Eclipse 类似)一起使用。

某些 IDE 可能具有在一种语言中比在另一种语言中更好地工作的特性,例如关键字突出显示。

If separate, is the compiler responsible for just the assembly code creation as well as optimizing the assembly code?

汇编语言的创建不是该过程的必需部分。

通常,编译器有一个选项供您提供,以便打印汇编语言列表。

一些编译器在不经过汇编语言生成的情况下发出可执行代码。

关于c++ - 预处理器、汇编器和链接器是编译器的一部分吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33712987/

相关文章:

c++ - 调试与发布可执行文件有何不同?

c - 使用仅在运行时初始化的函数指针解析 [-Werror=maybe-uninitialized]

assembly - objdump 输出中的 "-0x1(%edx,%ecx,1)"是什么意思?

c - 我应该知道什么来优化程序?

c++ - 使用大数组索引增加访问时间

c++ - boost mutex, condition, scoped_lock ,我在这里用错了吗?

c++ - 使用 DFS 在图中查找连通分量 (adjA)

c++ - MFC:从另一个线程访问GUI?

C 字符串赋值给出段错误

c - strcat_s() 是否需要使用 realloc()?