代码之家  ›  专栏  ›  技术社区  ›  John Dibling

学究:什么是源文件?标题是什么?

  •  16
  • John Dibling  · 技术社区  · 14 年前

    为了这个问题,我只对标准兼容的C++感兴趣,而不是C或C++ 0x,而不是任何实现细节。

    Questions #include "" #include <> . 争论通常归结为两个不同点:

    1. 特定的实现通常会为这两种形式搜索不同的路径。这是特定于平台的,不在本问题的范围内。
    2. #包括<&燃气轮机; 表示“headers”,而 #包括“”

    ISO/IEC 14882:2003(E)

    16.2源文件包含

    include指令应标识可由实现处理的头文件或源文件。

    2 窗体的预处理指令

    # include  &lt h-char-sequence &gt new-line
    收割台 由&之间的指定序列唯一标识;lt和&gt分隔符,并导致用标头的整个内容替换该指令。如何指定位置或标识标头是实现定义的。

    # include "q-char-sequence" new-line
    源文件 由“分隔符”之间的指定序列标识。以实现定义的方式搜索命名的源文件。如果不支持此搜索,或者搜索失败,则重新处理该指令,如同它已读取一样

    (上面引用的重点是我的。)这一区别的含义似乎是标准打算区分“头文件”和“源文件”,但文档没有定义这些术语或它们之间的区别。

    158)头文件不一定是源文件,由头文件名分隔的序列也不一定是有效的源文件名(16.2)。

    似乎意味着头文件可能不在文件系统中,但也不是说源文件在文件系统中。

    2词汇惯例

    1 在本国际标准中,程序的文本以称为源文件的单位保存。一个源文件以及所有头文件(17.4.1.2)和通过预处理指令包含的源文件(16.2) #include

    这是我能找到的最接近一个定义,它似乎暗示着标题不是“程序的文本” 一个标题,它不是程序文本的一部分吗?这有点误导。

    那么什么是标题?什么是源文件?

    5 回复  |  直到 7 年前
        1
  •  4
  •   anon anon    14 年前

        2
  •  8
  •   MSN    14 年前

    我的阅读是,标准的标题,包括使用 <> 尖括号,不必是文件系统上的实际文件;e、 g.实现将免费启用一组“内置”操作,提供 iostream 当它看到 #include <iostream> .

    #include "xxx.h"

    编辑:为了回答您的具体问题,我认为“标题”仅限于那些 #include 标准中规定的可拆卸设施: , vector .h 程序员可以编写或使用。

        3
  •  2
  •   James Curran    14 年前

    标准头文件(string、iostream)不一定必须是具有这些名称的文件,甚至根本不是文件。只要你说

    #include <iostream>
    

        4
  •  2
  •   Mike Seymour    14 年前

    正如你的语录所说:标题是使用 <> "" . 这些文件的内容究竟从何而来,以及有哪些非标准的头文件可用,都取决于实现。如果包含标准头,则所有标准指定的都是定义的内容。

    按照惯例,头文件通常是系统范围的东西,源文件通常是项目的本地文件(对于项目的某些定义),但是标准明智地不会陷入与项目组织有关的任何问题;它只是给出了与这些约定兼容的非常通用的定义,将细节留给实现和/或用户。

    几乎所有的标准都是在程序经过预处理后处理的,此时没有源文件或头之类的东西,只有上一个引用定义的翻译单元。

        5
  •  0
  •   dmckee --- ex-moderator kitten    14 年前

    六羟甲基三聚氰胺六甲醚。。。

    我不经意间的理解是&燃气轮机;includes和“”includes是从c继承的,而 事实上 意思是<&燃气轮机;搜索系统和编译器提供的头的路径,“”还搜索本地和用户指定的路径。

    上面的定义似乎在某种意义上与该用法一致,但将“header”的用法限制为编译器或系统提供的内容 独家 用户提供的代码,即使他们有传统的“接口在头”的形式。