【问题标题】:Difference between C and C++ Building ProcessC 和 C++ 构建过程之间的区别
【发布时间】:2012-08-16 18:46:57
【问题描述】:

据我了解,C 语言由 4 个阶段的编译过程组成:

在我的 Windows 操作系统上 -

  1. 预处理器

  2. 组装

  3. 编译

  4. 链接

我想知道 C 编译器和 C++ 编译器在上述步骤方面是否有任何区别。我相信C++也可以由以上4个阶段组成。

从大局的角度来看,有没有我不知道的差异?

【问题讨论】:

  • 你应该切换步骤bc。此外,今天的大多数编译器不会生成汇编程序,除非被要求,而是直接生成目标代码。是的,C++ 编译器遵循相同的步骤。
  • 编辑并投票重新开放。希望你能得到你需要的答案。
  • @0A0D:感谢您重新提出问题。以后我会记住可接受问题的格式。

标签: c++ c compilation linker c-preprocessor


【解决方案1】:

预处理和链接阶段基本相同(C 和 C++ 共享预处理器,链接是在不考虑源语言的情况下完成的)。编译/组装阶段仍然存在,但它必须有所不同 - 毕竟,我们在这里处理的是不同的语言。

编辑:C 与 C++ 编译的细节太多了,无法在这里回答;)

【讨论】:

  • 如果我没记错的话,由于模板和内联函数,C++ 确实需要一些链接器支持。也就是说,它不会抱怨重复的符号。
  • 链接器的工作方式相同。正是代码发射阶段将模板派生符号标记为“弱”,从而允许它们正确链接。请注意,您可以为两者使用相同的链接器和相同的目标文件格式!
  • @PrasoonMishra :汇编阶段(如果它与编译分开)将编译器生成的汇编语言代码转换为适合目标 CPU 的机器可读二进制形式
  • @PrasoonMishra :不,它不是,除非它是它的一部分
  • @GrzegorzHerman:纯 C 链接器不需要支持“弱”符号和内联(即多重定义)函数。如果它支持 C++ 的额外要求,则只能对两者使用相同的链接器。
猜你喜欢
  • 1970-01-01
  • 2011-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-17
  • 2010-10-23
  • 2022-10-04
  • 2012-01-24
相关资源
最近更新 更多