C ++包含with和without .h

时间:2010-05-10 00:10:57

标签: c++

  

可能重复:
  What is the difference between using #include<filename> and #include<filename.h> in c++

我从来没有注意到,无论我是否在包含的末尾都包含.h,所以我总是忽略其含义,但我只是在我的特定程序中注意到,我如果我包含“string”,则会收到错误“memcpy未在此范围内声明”,但如果我包含“string.h”则不会。

首先,我想知道这个具体原因,但一般也是两者的区别。同时,如果有人能够解释尖括号中的包含与引号中的包含之间的区别,那么我们将非常感激。

5 个答案:

答案 0 :(得分:28)

<string>是包含std::string及其朋友的C ++标准库字符串头文件。 <string.h>是与C标准库不同的标题,它具有操作C字符串(以空字符结尾的字符串)和其他相关函数的函数。

两者完全不同且无关。在C ++中(如在C中),头文件可以具有任何扩展名。 C ++标准库头没有扩展名; C标准库头文件的扩展名为.h.hpp.hxx也很常见。

答案 1 :(得分:6)

我只想补充一点,在C ++中,有一些传统的C形式可用的C标题,如string.h,它们的使用方式与#include <string.h>类似,但也有一些名称以cstring开头的对应标题。字母“c”,没有扩展名 - 如#include <cstring>。这些标头用作C ++标头std,这些标头中的名称位于{{1}}名称空间中。

答案 2 :(得分:2)

它们是两个不同的文件,彼此无关。

#include <string>指的是C ++标准库STL字符串

#include <string.h>定义了几个操作C字符串和数组的函数。

不包括扩展名。

某些头文件没有附加.h。您通常会看到包含模板的头文件。

答案 3 :(得分:1)

关于使用尖括号和引号之间的区别,我认为它与查找头文件的顺序有关:如果它在引号之间,编译器将首先检查工作目录(不是很在检查系统头目录之前,在系统头文件中很有用,因为它们与编译器不在同一目录中。

答案 4 :(得分:1)

关于包含在尖括号和引号中的包含之间的区别,第一个指示预处理器首先沿/ I编译器选项指定的路径搜索包含文件。第二个告诉预处理器在包含#include语句的文件的同一目录中查找包含文件。