使用#include<filename> and #include<filename.h
&gt;之间的区别在C++?使用了哪两个,为什么要使用它?
答案 0 :(得分:32)
C ++仅包含C语言中未找到的文件,从未使用filename.h
。自从第一个C ++标准出版(1998)以来,他们已经使用filename
作为自己的标题。
C标准继承的文件变为cfilename
而不是filename.h
。像filename.h
这样继承的C文件已被弃用,但仍然是C ++标准的一部分。
不同之处在于,在C ++中的std::
中的名称空间cfilename
中找不到C中未定义为宏的名称,而filename.h
中的名称在全局名称空间范围内。因此,您将在stddef.h中找到::size_t
,在cstddef中找到std::size_t
。两者都是标准C ++,但不推荐使用:: size_t(参见C ++标准的附录D)。
现在这些是不同的。
std::
内。没有名字冲突了。 filename.h
)将来可能会消失。答案 1 :(得分:18)
#include <foo.h>
在C ++标准之前的C ++代码中很常见。标准将其更改为#include <foo>
,其中包含放置在std
命名空间中的标题的所有内容。 (感谢litb指出标准从未允许.h标题。)
没有神奇的事情,第一个寻找名为'foo.h'的文件,第二个寻找名为'foo'的文件。它们是文件系统中的两个不同文件。标准只是更改了应包含的文件的名称。
在大多数编译器中,旧的头文件仍然存在向后兼容性(以及与C的兼容性),但是想要遵循标准的现代C ++程序不应该使用它们。
对于标准C头文件,C ++版本在开头有一个c,所以C头文件
#include <stdio.h>
变为
#include <cstdio>
答案 2 :(得分:4)
旧标准使用#include <filename.h>
语法。将名称空间和模板添加到语言后,标准已更改为#include <filename>
。
这样做是为了使标准库的东西都可以放在std命名空间中。由于#include <filename.h>
文件不使用名称空间,因此没有名称空间概念的旧代码仍然有效。
新代码应始终使用#include <filename>
格式。如果使用旧格式,则它们定义的所有符号将放在全局命名空间而不是标准。
答案 3 :(得分:2)
如果你在谈论标准库(因为否则它根本不起作用),区别在于
#include< header >
//my code
是根据C ++标准调用标头的正确方法,而
#include< header.h >
//my code
已被弃用(在C ++标准中,但根据C99标准仍然是必需的)并且与其他C行李一起出现。
所以你应该使用:
#include< cmath >
//my code
不
#include< math.h >
//my code
答案 4 :(得分:0)
没有.h的是C ++头文件,而.h的是C头文件。这仅适用于C ++中的标准头文件。
如果您要包含自己的文件或不属于标准C ++的文件,则需要始终编写完整的文件名(可以是任何内容)。