C ++ - #include“filename”

时间:2011-01-22 08:46:34

标签: c++ include

this tutorial,它会提到以下#include "filename"

  

#include“filename”告诉编译器在中查找文件   包含源文件的目录   做#include。 如果失败,   它将与角度相同   括号

粗体字体句的含义是什么?

感谢。

2 个答案:

答案 0 :(得分:10)

粗体位只是意味着,如果使用"方法找不到引号内指定的文件,它将恢复为<>方法。


我应该提一下,它查找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 ..."是错误的。在两种情况下,它完全取决于它如何找到文件的实现。

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

您只需阅读特定实施的文档,了解这些方法的用途。

答案 1 :(得分:4)

虽然确切的细节依赖于实现,但有一些常见的做法。在大多数常见编译器中,使用引号#include "filename.h"默认搜索当前目录。使用尖括号#include <filename.h>搜索系统定义的库目录。它的含义是,如果当前目录没有您需要的文件,它将搜索系统目录。

请注意,某些编译器可能不同,编译器本身可能有更改这些目录的选项。系统头也可能实际上不存在,但编译器可以直接识别#include <foo.h>以启用某些内置定义。