在this tutorial,它会提到以下#include "filename"
:
#include“filename”告诉编译器在中查找文件 包含源文件的目录 做#include。 如果失败, 它将与角度相同 括号。
粗体字体句的含义是什么?
感谢。
答案 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>
以启用某些内置定义。