角括号之间的差异< >和双引号“”在C ++中包含头文件?

时间:2010-07-01 22:07:55

标签: c++ c c++11

  

可能重复:
  What is the difference between #include <filename> and #include “filename”?

在C ++中包含头文件时,尖括号< >和双引号" "之间有什么区别?

我的意思是应该使用例如#include <QPushButton>包含哪些文件以及使用例如#include "MyFile.h"来包含哪些文件???

2 个答案:

答案 0 :(得分:232)

它依赖于编译器。也就是说,通常使用"优先于当前工作目录中的标头超过系统标头。 <>通常用于系统标头。从规范(第6.10.2节):

  

表单

的预处理指令
  # include <h-char-sequence> new-line
     

在一系列实现定义的位置中搜索由<>分隔符之间的指定序列唯一标识的标头,并导致该标头的整个内容替换该指令。如何指定场所或标识的标题是实现定义的。

     

表单

的预处理指令
  # include "q-char-sequence" new-line
     

导致由"分隔符之间的指定序列标识的源文件的全部内容替换该伪指令。以实现定义的方式搜索指定的源文件。如果不支持此搜索,或者搜索失败,则会重新处理该指令,就好像它已读取

一样
  # include <h-char-sequence> new-line
     

使用相同的包含序列(包括>个字符,如果有的话)来自原始序列   指示。

所以在大多数编译器上,使用""首先检查本地目录,如果找不到匹配,则继续检查系统路径。使用<>开始使用系统标头进行搜索。

答案 1 :(得分:44)

使用尖括号时,编译器会在包含路径列表中搜索该文件。当你使用双引号时,它首先搜索当前目录(即编译模块的目录),然后它才会搜索包含路径列表。

因此,按照惯例,您使用标准包含的尖括号和其他所有内容的双引号。这样可以确保在(不推荐)情况下,您有一个与标准标题同名的本地标题,在每种情况下都会选择正确的标题。