关于c ++头文件包含的基本问题?

时间:2010-04-16 12:45:07

标签: c++ header-files

以下3个课程有何不同?是< iostream>头文件或C ++标准库?

1

#include<iostream>
using namespace std;

int main()
{
        return 0;
}

2

#include<iostream>

int main()
{
        return 0;
}

3

#include<iostream.h>

int main()
{
        return 0;
}

提前致谢。

4 个答案:

答案 0 :(得分:13)

对于生成的程序,没有区别 - 因为程序引用了iostream库中的任何内容,所以任何智能编译器都不会编译这些库。

当您#include <iostream>时,您将包含带有iostream标准库声明的头文件。使用#include <iostream.h>#include <iostream>基本相同,除了它定义全局命名空间中的所有库名称而不是std:: - 它与程序的反向兼容性使用iostream的原始版本,但未删除.h。 (<iostream.h>版本通常也不支持宽字符,但只支持标准char。)

using namespace std;表示当前文件中名称引用的默认名称空间为std,这是大多数标准库函数使用的名称空间。虽然这意味着您不必使用std::为所有标准库调用添加前缀,但这也意味着您必须小心不要定义与标准库名称重叠的任何内容。

答案 1 :(得分:3)

头文件

没有3问题

标头iostream.h是一个非标准的标头,并不存在于所有平台上。事实上,它在我的系统中不存在(使用g ++和GNU libstdc ++)。所以使用它的任何代码都不会在我的系统上编译。

iostream.h标头曾经在C ++于1998年首次标准化之前很常见。但是由于98标准使用了<iostream>而不是<iostream.h>,后者已经失宠了(非所有平台都不再支持标准版和所有版本。使用它的代码应被视为非标准遗留代码,并且不可移植。教它的书应该被认为是过时的和避免的.�

答案 2 :(得分:2)

iostream是一个头文件,提供声明和原型,它们是部分C ++标准库的接口。

在您的系统上,有一个名为“iostream”(无扩展名)的文件,其内容在您编写{{1}时复制并粘贴(通过递归处理#include s) }}

#include <iostream>指令总是引入头文件的内容,它们永远不会添加“库”。头文件通常包含作为库接口的声明和原型,但实际库本身由链接器而不是编译器附加到程序中。链接C ++程序时,链接器将自动附加C ++标准库,除非您不告诉它,因此您不必担心这一点。

同样,#include语句不执行附加库的工作。此声明仅使您可以编写using namespace stdcout,而不是将其限定为stringstd::cout。这适用于任何名称空间,但通常不鼓励。

对于您给出的三个示例,它们都为您提供了使用C ++标准库的iostream部分所需的定义和原型,但是(2)是首选,(1)是可接受的,并且(3)已弃用。 (2)给出了额外的便利,可以省略std::string前缀(代价是减少你自己可以使用的变量名),以及(3)包含一个名为“iostream.h”的不同文件。而不是“iostream”,这通常是相同的,但带有.h的文件是预标准C ++的遗留物,因此未来的编译器可能不支持。

答案 3 :(得分:1)

前两个程序是标准C ++程序,而第三个程序使用非标准头文件<iostream.h>

在第一个程序中using namespace std将整个名称空间std纳入范围。

有关详细信息,请查看 this