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

Sul*_*lla 230 c c++ c++11

可能重复:
#include <filename>和#include"filename"有什么区别?

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

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

Car*_*rum 243

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

表单的预处理指令

  # include <h-char-sequence> new-line
Run Code Online (Sandbox Code Playgroud)

搜索一系列实现定义的位置,以查找由<>分隔符之间的指定序列唯一标识的标头,并使标头的整个内容替换该指令.如何指定场所或标识的头是实现定义的.

表单的预处理指令

  # include "q-char-sequence" new-line
Run Code Online (Sandbox Code Playgroud)

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

  # include <h-char-sequence> new-line
Run Code Online (Sandbox Code Playgroud)

使用>原始指令中相同的包含序列(包括字符,如果有的话).

因此,对于大多数编译器,使用第""一个检查本地目录,如果找不到匹配,则继续检查系统路径.使用<>系统标题开始搜索.

  • +1用于引用规范.这使您的答案更可验证. (7认同)
  • 你对"当前的工作目录"是什么意思?AFAIK引号优先使用使用此类指令的文件所在的目录. (3认同)

Fab*_*llo 45

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

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

  • 我并不完全同意这个约定。如果您的项目在某个时候被组织成库,您可能希望使库独立。您可能希望将此库移出代码库并依赖操作系统提供的包系统。在这种情况下,您可能必须重构所有包含内容。您可以通过将包含路径传递给编译器并使用尖括号(甚至对于本地包含)来避免这种情况。所以我想说:包含库头时使用尖括号,其他任何内容都使用双引号。 (6认同)