精华内容
下载资源
问答
  • 尖括号是先在系统目录下找, 双引号是首先在当前目录下找, 找不到就找系统目录.A: 说得很含糊. 那么我问你, 当前目录有个叫hdr.h的文件,当前目录下还有一个子目录sub, sub里面有两个文件hdr.h1.c,1.c中#include ...

    A: #include "..." 和 #include <...> 有什么区别?

    B: 他喵的, 这么简单的问题. 尖括号是先在系统目录下找, 双引号是首先在当前目录下找, 找不到就找系统目录.

    A: 说得很含糊. 那么我问你, 当前目录有个叫hdr.h的文件,

    当前目录下还有一个子目录sub, sub里面有两个文件hdr.h和1.c,

    1.c中#include "hdr.h",

    那么在当前目录编译sub/1.c, 它应该包含哪一个hdr.h?

    bash-3.2$ tree

    |-- sub

    |   |-- 1.c

    |   `-- hdr.h

    `-- hdr.h

    bash-3.2$ cat sub/1.c

    #include "hdr.h"

    bash-3.2$ gcc -c sub/1.c

    B: 应该包含外面的hdr.h吧, 因为它在gcc工作的当前目录, 而子目录的hdr.h不在当前目录, 应该搜不到.

    A: 错, 包含的是sub/hdr.h !

    B: 啊!... 喔... 双引号是首先在使用include的源文件所在目录找(也就是1.c所在的目录sub找), 而不是编译器当前工作目录找, 我原来理解错了.

    A: 是的, gcc和msvc的include双引号都是先在使用include的源文件所在目录找.

    B: C99标准是怎么规定的? 是源文件当前目录还是编译器工作目录?

    A: 其实C99标准没有规定#include "..." 先找哪个目录, 只说取决于实现, 你可以设计一个C编译器include双引号时按你设计的方式找(如果找不到退化为#include <...>). 但事实上的工业标准是"双引号优先从使用include的源文件所在目录".

    B: 明白了.

    A: 那么我再问你, #include <...> 所谓的"从系统目录找", 那么"系统目录"到底有哪些, 怎么看呢?

    B: 编译时-I指定的目录呗.

    A: 如果没指定-I的参数时, 是不是系统目录列表就是空的?

    B: 当然不是, 有默认的吧.

    A: 怎么看默认的?

    B: 这个不知道. 怎么看?

    A: 以gcc为例, 在命令行运行 echo | gcc -E -v -

    bash-3.2$ echo | gcc -E -v -

    * * *

    #include "..." search starts here:

    #include <...> search starts here:

    /usr/lib/gcc/i686-pc-linux-gnu/4.8.2/include

    /usr/local/include

    /usr/lib/gcc/i686-pc-linux-gnu/4.8.2/include-fixed

    /usr/include

    End of search list.

    B: 那么我指定gcc -I. 时是把 . 作为搜索路径还是把当前目录转成绝对路径加入到列表中呢?

    A: 这个问题问得好! 其实我也不知道, 要不我们试一下.

    bash-3.2$ echo | gcc -E -v -I. -

    * * *

    #include "..." search starts here:

    #include <...> search starts here:

    .

    /usr/lib/gcc/i686-pc-linux-gnu/4.8.2/include

    /usr/local/include

    /usr/lib/gcc/i686-pc-linux-gnu/4.8.2/include-fixed

    /usr/include

    End of search list.

    B: 并没有转成绝对路径, 就是一个点.

    A: 恩, 那么问题来了, 下面这种情形下( 注意: 1.c的内容修改为 #include ), 会包含那个hdr.h ?

    bash-3.2$ tree

    |-- sub

    |   |-- 1.c

    |   `-- hdr.h

    `-- hdr.h

    bash-3.2$ cat sub/1.c

    #include 

    bash-3.2$ gcc -c -I. sub/1.c

    B: 我猜会用子目录的hdr.h.

    A: 我猜会用外层的hdr.h,

    在hdr.h写个1,

    在sub/hdr.h写个2,

    然后 gcc -E -I. sub/1.c.

    你看结果是1, 我猜对了!

    B: 嗯, 看来搜索路径列表是基于编译器工作路径的.

    展开全文
  • 尖括号 #include <stdio.h>,表示编译器只在系统默认目录...双引号 #include "myclass.h",表示编译器先在用户的工作目录下搜索头文件,如果搜索不到则到系统默认目录下去寻找,所以双引号一般用于包含用户自...

        尖括号 #include <stdio.h>,表示编译器只在系统默认目录或尖括号内的工作目录下搜索头文件,并不去用户的工作目录下寻找,所以一般尖括号用于包含标准库文件,例如:stdio.h,stdlib.h。

         双引号 #include "myclass.h",表示编译器先在用户的工作目录下搜索头文件,如果搜索不到则到系统默认目录下去寻找,所以双引号一般用于包含用户自己编写的头文件。

         因此,如果该头文件由自己编写,位于工作目录下,就一定要用双引号;若属于标准库文件,则两者都可以,默认习惯使用尖括号。

    展开全文
  • 尖括号是先在系统目录下找,双引号是首先在当前目录下找。已经成为习惯了,系统的头文件就用尖括号,自己写的就用双引号。读代码的时候也方便。 标准规定,包含C++提供的标准头文件或系统头文件时应使用尖括号,...

    尖括号是先在系统目录下找,双引号是首先在当前目录下找。

    已经成为习惯了,系统的头文件就用尖括号,自己写的就用双引号。读代码的时候也方便。

     

    标准规定,包含C++提供的标准头文件或系统头文件时应使用尖括号,包含自定义头文件时可使用双引号。 鉴于这里已经交代清楚了如何按照标准来包含一个头文件

     

     

    #include<>格式引用标准库头文件,编译器从标准库目录开始搜索

     

    #include“”格式:引用非标准库的头文件,编译器从用户的工作目录开始搜索

     

    双引号表示:

     

    先在程序的源文件所在的目录查找,如果未找到则去系统默认目录查找,通常用于包括程序作者 编写的头文件;

     

    首先在当前的源文件目录中查找,若未找到才到包含目录中去查找

     

    尖括号表示:

     

    知道系统默认目录或者括号内的路径查找,通常用于包含系统中自带的头文件。

     

    在包含文件目录中去查找(包括目录是有用户在设置环境是设置的),而不再源文件目录去查找;

     

    转载于:https://www.cnblogs.com/For-her/p/3238349.html

    展开全文
  • C++ #include尖括号和双引号的区别

    千次阅读 2018-03-29 22:27:42
    转自:C语言学习网 如果你还看一些别的C++教程,那么你可能很早就发现了,有些书上的#include命令写作#include &lt;文件名&gt;,但有时候又会出现#include "文件名"。你会很疑惑,到底哪个是对的...

        转自:C语言学习网    

         如果你还看一些别的C++教程,那么你可能很早就发现了,有些书上的#include命令写作#include <文件名>,但有时候又会出现#include "文件名"。你会很疑惑,到底哪个是对的呢?为什么要有这两种不同的写法呢?

        这两种写法都是正确的写法,但是它们却是有区别的。我们知道C++已经有一些编写好的头文件(比如标准函数库等等),它们存放在VC++的Include文件夹里。当我们使用#include <文件名>命令时,编译器就到这个文件夹里去找对应的文件。显然,用这种写法去包含一个我们自己编写的头文件(不在那个Include文件夹里)就会出错了。所以包含C++提供的头文件时,应该使用尖括号。

        相反地,#include "文件名"命令则是先在当前文件所在的目录搜索是否有符合的文件,如果没有再到Include文件夹里去找对应的文件。因此,无论这个文件是C++提供的还是自己编写的,使用#include "文件名"命令一定是正确的。这也正是书中本节之前的程序一律使用#include "文件名"命令的原因。

        关于标准的尖括号

        最新的C++标准中,包含C++提供的头文件并不是写作#include <文件名>,如#include <iostream.h>的写法是过时的。正确的写法是#include <iostream>,并且要使用std名字空间。有些程序中会有using namespace std;就是按照这种标准书写的。名字空间也称为命名空间,主要是用来避免大型程序开发中的标志符冲突。标准还规定了如何在C++中包含C的头文件,有兴趣的读者可以到网上查阅这些资料。

            尽管以上两种#include命令都可以正确地被VC++识别了,但是它们却并不符合C++的标准。标准规定,包含C++提供的标准头文件或系统头文件时应使用尖括号,包含自定义头文件时可使用双引号。 鉴于这里已经交代清楚了如何按照标准来包含一个头文件,在之后的章节中,所有程序的#include命令将按标准来书写。

        试试看:
    如果包含头文件时写作如#include <iostream>,但是没有using namespace std;,即没有使用std名字空间,能否正常实现输入输出功能?
    结论:如果按照这样的写法,必须要使用std名字空间。

        

    展开全文
  • C++ 中include头文件时尖括号双引号的区别 1 区别 系统自带的头文件用尖括号括起来,表示编译器先在用户的工作目录下搜索头文件,如果搜索不到则到系统默认目录下去寻找,所以双引号一般用于包含用户自己编写的...
  • #include尖括号和双引号的区别

    千次阅读 2018-08-14 19:05:43
    例如:VS2015的安装目录\Microsoft Visual Studio 14.0\VC\include下面就包含了标准库的头文件。 第二种方式:采用" "方式,表示先在工程所在路径下搜索,如果失败,再到系统标准路径下搜索。 所以,...
  • 1、使用尖括号的话,编译时会先在系统include目录里搜索,如果找不到才会在源代码所在目录搜索。2、使用双引号则相反,会先在源代码目录里搜索,如果未找到则去系统默认目录查找,通常用于包含程序作者编写的头文件...
  • #include中尖括号和双引号的区别

    千次阅读 2019-02-02 19:30:36
    #include“ ”的区别 一、引用的头文件不同 #include&lt; &gt;引用的是编译器的类库路径里面的头文件。 #include“ ”引用的是你程序目录的相对路径中的头文件。 二、用法不同 #include&lt; &...
  • 1 加双引号表示,应用程序先在当前的文件夹里面寻找该头文件,若没有找到,再到系统文件夹里去找。一般加双引号多为自己编写的...2 加尖括号则表示,应用程序直接到系统文件夹去找该文件。这类多为系统头文件。 ...
  • 前言:我们又是在写C++的时候,会看见...对于使用双引号还是尖括号,它们的主要区别是: 编译器预处理阶段查找头文件的路径不一样。 1、对于使用双引号的头文件 查找头文件路径的顺序为: (1)先在当前源文件所...
  • include 引用头文件时,双引号和尖括号的区别:1.双引号:引用非标准库的头文件,编译器首先在程序源文件所在目录查找,如果未找到,则去系统默认目录查找,通常用于引用用户自定义的头文件。 2.尖扩号:只在系统...
  • Include头文件的顺序 对于include的头文件来说...双引号和尖括号都包含的是(按照查找头文件路径顺序排列): 1.编译器设置的头文件路径(编译器可使用-I显式指定搜索路径) 2.系统变量CPLUS_INCLUDE_PATH/C_INCLUDE_P
  • 引用号和尖括号的区别 编译的预处理阶段查找头文件的路径不一样 “”查找顺序:当前头文件目录->编译器设置的头文件路径(编译器可使用-I显式指定搜索路径)->系统变量CPLUS_ INCLUDE PATH/C_ INCLUDE PATH 指定的...
  • 关注、星标公众号,不错过精彩内容素材来源:网络编辑整理:strongerHuang很多程序员写代码,可能没有仔细研究一些细节问题,比如今天说的#include相关的内容。一、关于#inc...
  • 2.1 Include SyntaxBoth user and system header files are included using the preprocessing directive ‘#include’. It has two variants:#include This variant is used for system header files. It searches ...
  • 尖括号<xxx.h>,表示编译器只在系统默认目录或尖括号内的工作目录下搜索头文件,并不去用户的工作目录下寻找,所以一般尖括号用于包含标准库文件,例如:stdio.h,... 双引号"xxx.h",表示编译器先在用户的工...
  • 编译出错,猜测,用双引号#include的时候,只会在同一级路径,或者下一级路径下搜索,在remote_call路径下添加头文件,commn路径下新建文件夹,增加头文件,然后再进行测试 4、按照上面的假设,发现还是编译错误...
  • 尖括号 #include 一般用于包含标准的库头文件,编译器会去系统配置的库环境变量者用户配置的路径去搜索,而不会在项目的当前目录去查找 用双引号 #include "": 一般用于包含用户自己编写的头文件,...
  • 下面小编就为大家带来一篇include包含头文件的语句中,双引号和尖括号的区别(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 预处理器发现 #include 指令后,就会寻找后跟的...但是包含头文件有两种方式,尖括号和双引号。 简单区分: 系统自带的头文件用尖括号括起来,这样编译器会在系统文件目录下查找。 #include <xxx.h>...
  • C++ 中 #include尖括号 双引号 的区别

    千次阅读 多人点赞 2019-02-22 21:54:06
    和双引号(" ")的区别 区别: 双引号"xxx.h",表示编译器先在用户的工作目录下搜索头文件,如果搜索不到则到系统默认目录下去寻找,所以双引号一般用于包含用户自己编写的头文件。如:#include "student.h...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,237
精华内容 2,094
关键字:

include尖括号和双引号