看起来很多人在他们的C++代码中包含example.h而不是cexample。我知道C++版本中的所有内容都是在std命名空间中声明的,但我不知道其他的差异。那么为什么人们使用C头文件呢?这样做可以吗?
看起来很多人在他们的C++代码中包含example.h而不是cexample。我知道C++版本中的所有内容都是在std命名空间中声明的,但我不知道其他的差异。那么为什么人们使用C头文件呢?这样做可以吗?
std
命名空间中。这样,任何标准库的调用或使用都需要加上std::
前缀,以保持统一性。这是标准做法。当然,如果您已经有一堆C代码,不想为每个标准调用添加std::
前缀,则可以使用经典的C头文件。stdio.h
和cstdio
不是同一个东西。后者包含前者,但是取消了一些宏定义并将其替换为真正的函数。个人建议始终使用C++头文件!没问题。但在C++代码中使用C++风格(即不使用.h扩展名)似乎更整洁。我不会(也不会)担心这个问题。
#include "myheader.h"
,因此最终仍然需要扩展名。 - vallentin在使用C++时,我更喜欢使用C++头文件语法,除非有理由不这样做。根据标准中以下评论,使用<name>
(没有.h
语法)似乎更安全:
第二版2003-10-15的ISO/IEC 14882中,第17.4.1.2节第3和第4段陈述:
标准C库的功能由18个附加头文件提供,如表12所示:
然后列出了表格,例如<cassert>
,<ciso646>
等,然后继续说:
除第18至27条款中所述外,每个头文件的内容应与相应的头文件name.h的内容相同....
因此,标准定义了没有.h
的头文件,但指出它们在很大程度上与C编译器提供的头文件相同,并提供第18至27条款以确定差异。
很遗憾,我无法确定这些部分在标准中的位置,以便在必要时记录差异。
我不认为使用C++编译器时需要存在.h
头文件。
正如@James在评论中指出的那样,D.5节第1和第2段规定必须存在C头文件:
... C++标准库提供了18个C 头文件....
每个C头文件,其名称形式为name.h,就好像由相应的头文件将每个名称放置在标准库命名空间中一样,也被放置在命名空间
std
的命名空间范围内,并跟随一个显式的using-declaration(7.3.3)
name.h
头文件)。该要求在C++标准的D.5/1中规定。 - James McNellis
std::
的标准C函数更多的编译错误。 - wilhelmtell