【问题标题】:why Preproccessor is not a part of java programs like C & C++?为什么 Preproccessor 不是 C 和 C++ 等 Java 程序的一部分?
【发布时间】:2017-01-29 12:58:24
【问题描述】:

与在 C/C++ 中一样,该程序首先被提供给预处理器以包含文件并执行宏扩展等......然后被提供给编译器以将代码转换为汇编格式并继续处理。但在 Java 中我会没有看到预处理器的使用。为什么这样,然后谁来完成通常预处理器处理的所有任务?

【问题讨论】:

    标签: java toolchain


    【解决方案1】:

    预处理器不是Java编译过程的必要步骤。

    在 C/C++ 中,存储在不同文件中的函数被“包含”在其他文件中,这实质上意味着它们被完整地复制并粘贴到文档中。考虑到当时的硬件功能,这在当时是一个非常好的主意,但现在更现代的语言使用一种称为“符号导入”的东西。

    符号导入涉及在另一个文件中查找符号,而不是直接使用文本。在 Java 中,这可能涉及导入常量或类。这些导入充当对其他文件中代码的引用。因此,Java 允许直接在语义级别上进行这些导入,而不必费心让预处理器复制和粘贴代码并最终确定哪些代码属于哪个文件。

    这使得语言的编译过程不需要预处理器,因此连同其他原因一起被忽略了。

    【讨论】:

    • 先生,什么是语义级别?你能给我一个想法吗?!
    • 编译器会区分文本(它的输入)、标记(对它有意义的部分,例如数字和关键字)和这些标记的解析树(知道code 表示 if 语句的表达式)。当您在语义级别查看代码时,您知道它的结构(它被解析),并且您知道其中的每个符号的含义。因此,您可以看到已定义了哪些常量,存在哪些类,等等。在此级别分析代码称为语义级别,因为您在一个级别上工作 (...)
    • (续)您正在查看一段代码的含义和结构,而不是查看纯文本。在这里可以完成编译器的其他职责,例如类型检查和优化,因为正在编译的代码的意图、含义和结构是已知的。
    • @OswaldVinny:如果此答案有帮助,请务必将您的问题标记为已回答。
    猜你喜欢
    • 2010-12-08
    • 2011-11-16
    • 2014-05-08
    • 1970-01-01
    • 2015-04-25
    • 2013-02-21
    • 1970-01-01
    • 2022-08-10
    • 1970-01-01
    相关资源
    最近更新 更多