当程序包含头文件时,使用""和<>有什么区别?

11

肯定是重复的,对吧? - Paul R
@Paul R:你可以在大约5秒钟内使用搜索框找到这个答案。 - JeremyP
@JeremyP:显然,我今天早上的搜索技术不够强大,因为我曾经尝试过但未能找到任何我相信一定有很多重复内容的网页。但是,对你自己找到的一个我向你表示祝贺。 - Paul R
@Paul R:我使用了这个网站上的搜索框,而不是谷歌。我不知道这是否有所不同。 - JeremyP
@JeremyP:我似乎总是在SO搜索框中运气不佳,通常我只是在Google中搜索“<搜索词> site:stackoverflow.com”,这似乎更有效。但显然在这种情况下不起作用(可能是因为Google不喜欢<>""作为搜索词)。 - Paul R
3个回答

17

系统头文件请使用<whatever>,而对于你自己的头文件,请使用"whatever"

区别在于当头文件名被引号包括时,编译器会在本地目录中查找该文件,但是使用<>时则不会。如果想要技术上严谨的话,C标准并没有保证这一点,但实际上几乎所有的编译器都是这样工作的。


9

"" 在当前文件路径中搜索。 <> 在全局包含路径中搜索。

编辑:您要求绝对路径和相对路径。

假设您有以下文件结构:

folderX
 -fileX.a
 -fileX.b
 -folderX.Y
  -fileX.Y.a
  -fileX.Y.b
 -folderX.Z
  -fileX.Z.a

那么,假设folderX是可用的最顶层目录,fileX.Z.a的绝对路径将是folderX/folderX.Z/fileX.Z.a。相对于例如fileX.afileX.Z.a的相对路径只是部分路径folderX.Z/fileX.Z.a,也就是你从fileX.a所在的目录开始路径。


5
#include <file>

此变体用于系统头文件。它在标准的系统目录列表中搜索名为file的文件。您可以使用“-I”选项在此列表前添加目录。

#include "file"

这个变体用于您自己程序的头文件。它首先在包含当前文件的目录中搜索名为file的文件,然后在用于 . 的相同目录中搜索。

#include的参数,无论是用引号还是尖括号括起来的,都像字符串常量一样运作,不识别注释,也不展开宏名称。因此,#include 指定了一个名为“x/*y”的系统头文件的包含。

但是,如果文件名中有反斜杠,则将其视为普通文本字符而不是转义字符。不会处理C语言字符串常量适用的任何字符转义序列。

参考资料


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接