【问题标题】:Is the preprocessor IDE only feature?预处理器 IDE 是唯一的功能吗?
【发布时间】:2018-10-11 13:10:44
【问题描述】:

我尝试进行研究,但无法找到预处理器的实际来源 - 它们是 IDE 的一部分(意味着每个 IDE 都有自己的实现)、独立程序还是编译器的一部分?

如果它们成为现代编译器的一部分,我想它在历史上不会是这样的。那时它是如何运作的?

谢谢

【问题讨论】:

  • 它们的语法是语言的一部分(至少是标准的)。
  • 它们是编译器工具套件的一部分,并且一直都是。与 IDE 无关。
  • 没关系。每个工具链都可以随心所欲地实现它。
  • 任何 C 或 C++ 编译器要么拥有自己的内部预处理器,要么与它调用的预处理器捆绑在一起。除此之外,IDE 可能包含扩展宏定义的能力,因为这对调试很有用,因此编译器将具有预处理器这一事实并不意味着 IDE 不能拥有自己的预处理器。此外,IDE 可以有自己的自定义预处理器,例如code blocks 有一个。

标签: c++ c compilation ide preprocessor


【解决方案1】:

不,预处理器是编译器的一部分。如果您从控制台编译(即直接使用 gcc 或其他编译器),预处理仍然有效。

预处理是一个非常强大的工具,我相信它一直是编译器的一部分。或者,如果一些早期的编译器缺少这个特性——好吧,必须手动完成预处理器的工作。

【讨论】:

  • 你从不在你的 shell 中使用cpp foo.c 吗?
【解决方案2】:

该语言最早的工作将在几年后命名为 “C”,始于 1969,基于语言 BCPL . 预处理器于 1972 年问世

当时C仍在工作中,所以我们可以说预处理器从C本身就已经存在。没有预处理器就没有 C 编译器。。 C++ 在 C 之后出现,它从一开始就有预处理器。

如果预处理器是一个单独的可执行文件而不是编译器,这无关紧要,但通常它是编译器的一部分。那时还没有 IDE。


Here's a link 可以阅读更多内容。这是关于预处理器的部分:

在 1972-3 年左右发生了许多其他变化,但最重要的是引入了 预处理器,部分是在 Alan Snyder [Snyder 74] 的敦促下,但也承认 BCPL 和 PL/I 中可用的文件包含机制的实用性。它的原始版本非常简单,只提供包含文件和简单的字符串替换:#include 和 #define 无参数宏。此后不久,主要由 Mike Lesk 和 John Reiser 对其进行了扩展,以将宏与参数和条件编译结合起来。预处理器最初被认为是语言本身的可选附件。事实上,多年来,除非源程序在开始时包含特殊信号,否则它甚至不会被调用。这种态度持续存在,并解释了预处理器语法与语言其余部分的不完全集成以及早期参考手册中对其描述的不精确性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-13
    • 2014-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多