C++ 何时.h不需要包含头文件?

C++ 何时.h不需要包含头文件?,c++,include,C++,Include,这项工作: #include <iostream> using namespace std; 标准C++标题不使用.h。其他一切都可以(或者更准确地说,其他一切都使用它想要的任何扩展,.h、.hxx、.hpp、.hh和更多) 标准C标题可以通过以下两种方式之一包含: #include <stdio.h> #include <cstdio> #包括 #包括 第二种形式将其符号包装在std名称空间中 最初的意图是,原则上,头可以以某种高度优化的预编译状态存储

这项工作:

#include <iostream>
using namespace std;

标准C++标题不使用.h。其他一切都可以(或者更准确地说,其他一切都使用它想要的任何扩展,.h、.hxx、.hpp、.hh和更多)

标准C标题可以通过以下两种方式之一包含:

#include <stdio.h>
#include <cstdio>
#包括
#包括
第二种形式将其符号包装在
std
名称空间中


最初的意图是,原则上,头可以以某种高度优化的预编译状态存储在数据库中,在这种情况下,文件扩展名的想法是没有意义的。我不知道这是在实践中发生的。

< p>不需要由C++标准定义的头文件,没有一个具有.h扩展。C++版本的代码> STDIO .H./C> >:

#include <cstdio>
您可以通过尝试使用以下方法来检查您自己的标题是否完成了它应该执行的操作:

std::printf( "hello" );

在代码中 .< p> h。不需要,只要文件系统中文件名中的h被省略。< /p>如果STDIO不是标准C++头,如果@用户:<代码> STDIO < /C>是标准C标题,那该怎么办?这些标题包含为
#include
。不,C的
stdio.h
用C++的
cstdio
包装。对于其他C头文件也是如此。@user198729:它们不是全部打包到一个文件中。string.h>cstring,stdio.h>cstdio,等等。@user198729,stdio.h用于向后兼容,而cstdio用于新代码。我查看了
cstdio
,但没有找到将名称放入
std
namespace@user198729我不知道你在用哪个编译器,但这正是标准要求cstdio必须做的。编译器不应该很重要,只是头文件本身没有提到
std
。您可以查看一下,此外,我已经粘贴在上面的帖子:)@ USSRAD7729编译器有很多问题-标题是特定编译器实现的一部分。我使用Visual C++ 2008 Express,似乎魔术是由<代码>使用::code>和类似的。可以看看命名空间声明的宏
\u STD\u BEGIN
\u STD\u END
。我不知道该宏到底是如何工作的,但是它似乎没有包装
stdio.h
?那些在
\u STD\u BEGIN
\u STD\u END
之间使用
语句的
将这些名称导入到STD命名空间中。它们现在既可以作为
size\u t
使用,也可以作为
std::size\u t
使用(不要问我为什么它们应该保持全局可见)C++版本有其他的不同之处。例如,在C库中,有些东西是宏,C++将其定义为普通函数。另外,
为函数添加了各种重载(C中没有重载)等。
#include <cstdio>
_GLIBCXX_BEGIN_NAMESPACE(std)
std::printf( "hello" );