<iostream>与<iostream.h>对比“iostream.h”</iostream.h> </iostream>

时间:2008-10-18 00:08:06

标签: c++ iostream

在C ++中包含头文件时,...

之间的区别是什么

1)包括.h与不包括.h时将其包装在&lt; &GT;标志?

#include <iostream> vs. #include <iostream.h>

2)将标题名称包装在双引号中,而不是将其包装在&lt; &GT;迹象?

#include <iostream.h> vs. #include "iostream.h"

提前致谢!

8 个答案:

答案 0 :(得分:49)

简而言之:

iostream.h已被弃用 - 它是最初的Stroustrup版本,iostream是标准委员会的版本。通常编译器将它们指向同一个东西,但是一些较旧的编译器不会使用较旧的编译器。在一些奇怪的情况下,它们将存在并且不同(以支持遗留代码),然后您必须具体。

“”与&lt;&gt;只是意味着在进入库之前检查本地目录中的标题(在大多数编译器中)。

- 亚当

答案 1 :(得分:7)

这是一个不错的链接article.

总结一下,原因如下:

  

标准委员会的iostream库版本   制作与CFront实施有很大不同。   {剪断}

     

为了简化过渡,C ++标准委员会宣布了该代码   包括标准C ++头文件将使用include指令   没有延期。这允许编译器供应商发布旧样式   带有.h扩展名和新样式头的C ++库头   不

不使用.h版本的优点:

  

使用the编写新代码有几个原因   头文件的无扩展版本而不是.h表单。该   首先是在现代编译时这种代码的不可预测性   编译器。如前所述,使用.h标头的结果   是具体的实施。随着时间的推移,一个机会   给定编译器将使旧样式库可用减少。

答案 2 :(得分:5)

作为标准委员会(X3J16)中提议离开.h的人,我的初衷是解决关于.h,.H,.hpp,.hxx或.h ++文件扩展名的争论;或某些人希望标准中没有暗示这是磁盘上文件的名称,以便允许IDE将预编译的头信息从某个内部(如资源文件)或甚至是编译器。

虽然Unix认为文件名是单个字符串并且实际上没有识别扩展的概念,但DEC操作系统有将名称与扩展名分开的传统,并且如果省略了,则提供“默认扩展名”。特殊情况。这就是我从实现中使用实现想要使用的任何扩展的想法,并且它允许实现甚至不在磁盘上有这个文件。 (那时我是委员会的DEC代表。)

区分标准标头和预标准标头是一个额外的好处。

答案 3 :(得分:2)

标准方式(并且唯一保证可行的方式)是&lt; iostream&gt;。在gcc上,&lt; iostream.h&gt; (可能需要包含在&lt; backward / iostream.h&gt;中)将相关声明提取到全局命名空间(因此您不需要std :: namespace前缀)。

“iostream.h”将首先从包含源代码的目录开始尝试,因为“”表示项目的标题。 &LT;&GT;应该始终用于系统标头,“”用于您自己的标头。

答案 4 :(得分:1)

通常&lt;&gt;用于系统或标准库文件,而“”用于项目文件。如果您的编译器在本地搜索并且在找不到它时,我不会感到惊讶它默认为标准库版本。

至于.h,如果你使用C,我认为这并不重要。 在C ++中,我隐约记得有一个较新的版本和一个较旧的版本,没有它应该是新版本,但我甚至不确定旧版本是否仍然存在。

答案 5 :(得分:1)

这些是两个不同的问题。

  • .h和.h之间的区别 无扩展头与相同 名字是历史的。有的人 .h扩展名来自.h 原来的C ++标准没有 有一些现代的功能,如 名称空间和模板。它是 更简单的新标准 新的相同功能 头文件能够使用这些 新功能并保持旧(.h) 向后兼容的文件 遗留代码。

  • #include之间的区别 &LT; ...&GT;和#include“...”格式是 编译器的顺序 寻找文件。这通常是 实现依赖,但 想法是&lt;&gt;格式看起来 系统首先包含目录, 而“”看起来在同一目录中 作为#included它的源文件 第一

答案 6 :(得分:0)

第一个答案的简单答案是iostream.h不存在,至少在GCC实现中是这样。如果你在* nix上,请输入

%找到iostream.h
的/ usr /包括/ C ++ / 3.4.3 /后退/ iostream.h

%找到iostream
/usr/include/c++/3.4.3/iostream
的/ usr /包括/ C ++ / 3.4.3 /后退/ iostream.h

正如Zee的文章所说,iostream.h是为了向后兼容。

答案 7 :(得分:0)

关于标准C ++头文件的名称,在X3J16的早期(前2年),我们遇到了关于扩展应该在标准C ++头文件上的争论。当时由不同的供应商使用(并且受到某些操作系统对文件名的限制的影响)我相信有.h,.H,.h ++,。hpp,.HXX,以及可能的其他。在库组会议中,我建议我们关闭扩展,如果include行中没有,则将其留给实现提供其选择的默认文件扩展名,或者将名称用作数据库中的键。如果需要,预编译的头文件。 [类Unix系统处理文件名和扩展名&#39;作为单个字符串,我在委员会中代表DEC,并且许多DEC操作系统将扩展名存储在目录中作为名称的单独字段。所以DEC操作系统有一个强大的传统,即根据程序访问文件的目的应用默认扩展。告诉汇编程序&#39; X,Y = Z&#39;可能会导致读取输入文件Z.MAC(宏)并写入输出文件X.OBJ和Y.LST。无论如何,它避免了一场漫长的,没有赢的辩论,因此该小组同意了,Andy Koenig提出了小组对此(以及其他)对接受它的整个委员会的结论。我觉得有点有趣的是,实现错过了他们可以应用他们选择的默认扩展(我认为对编辑器和其他工具有用)并且只是将扩展名从文件名中删除的重点。