C++ - #包括“文件名”

问题描述:

this tutorial它提到以下有关#include "filename"C++ - #包括“文件名”

的#include“文件名”告诉编译器来查找该文件中 目录包含做着#源文件 包括。 如果失败, 将相同作用于倾斜 括号情况

什么意思是粗体的字体句子?

谢谢。

虽然确切细节是实现相关的,也有一些共同的做法。在最常见的编译器,使用#include "filename.h"默认搜索当前目录的报价。使用尖括号#include <filename.h>搜索系统定义的库目录。这是说,如果当前目录没有你需要的文件,它会搜索系统目录。

注意,一些编译器可能是不同的,你的编译器本身可能有选项来改变这些目录。另外还有一点系统头实际上并不存在的可能性,但#include <foo.h>直接由编译器识别,以实现特定的内置的定义。

+0

因为您已被接受,我是否可以建议您更改答案以正确定义查找头文件的位置。在标准方面,它的实现已经定义。或者至少说明查看当前目录是常见做法,但决不是强制性的。这不是酸葡萄,我只是厌恶不正确的接受答案。如果你解决了这个问题,我会很高兴得到赞扬。 – paxdiablo 2011-01-22 09:30:30

+0

paxdiablo:多种答案的美妙之处在于你不必将所有东西都打包成一个。 – 2011-01-22 21:40:47

粗体位仅表示如果使用"方法无法定位引号中指定的文件,则它将恢复为<>方法。


我应该指出,关于它会查找include文件的传输是实际上是不正确。在两种箱子(引号和尖括号),搜索位置是实现定义。

lex.header部分:

在这两种形式的报头的名称的序列被映射在一个实现定义的方式标头或作为在16.2指定的外部源的文件名。

16.2部分如下:


#include一个指令应识别可以由执行被处理的报头或源文件。

形式的预处理指令

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

搜索用于由<>定界符之间的指定序列唯一标识的报头实现定义的地方的序列,并且使由所述置换该指令的标题的全部内容。如何指定位置或标识的是实现定义的。

形式

# include " q-char-sequence" new-line 

的预处理指令使得由"定界符之间的指定序列所标识的源文件的全部内容替换该指令的。指定的源文件是以实现定义的方式搜索的。如果该搜索不被支持,或者如果搜索失败,则该指令被处理是否它与含有相同序列读

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

从原始指令(包括>字符,如果有的话)重新处理。


所以声明"... tells the compiler to look for the file in directory containing the source file doing the #include ..."是错误的。在这两种情况下,完全取决于如何找到文件。

话虽如此,其余都是正确的。如果"类型使用的方法未找到标题,则使用<>类型使用的方法。这实际上都是大胆的意思。

你只需要阅读你的特定实现的文档,看看这些方法是什么。