发件人: Kaz Kylheku
新闻组:comp.lang.c
主题: Re: include "file" 或 include <file>?
Message-ID: <slrn7j29e6.loc.kaz@ashi.FootPrints.net>
日期: Thu, 06 May 1999 05:16:54 GMT

On 6 May 1999 01:19:13 GMT, RaMzEyMe wrote
>在预处理器中
>      include "file"      和      include <file>
>有什么区别?

我来给你画个图。

        +-----------------------------------------------+
        |                                               |
        |         +--------------------------+          |
        |         | places searched          |          |
        |         | for <> includes          |          |
        |         +--------------------------+          |
        | places searched for "" includes               |
        +-----------------------------------------------+

助记符:双引号<>提示了封闭。

根据语言标准,C 实现会以两种不同的“位置”搜索头文件,如果它们是使用""包含的。它首先在一个位置查找,如果找不到头文件,它会查找另一个位置。

使用<>包含的头文件只会在第二个位置被搜索。

想象一下,上面的图是从外向内访问的。

在实际实现中,这通常是这样的:使用""包含的头文件会首先在其父文件(包含#include的那个)所在的位置查找。如果找不到,就会搜索一些预定义的路径;通常是包含随实现一起提供的头文件的目录。

各种编译器有各种影响行为的方式,这导致一些程序员以各种巧妙的方式组织他们的项目,例如将包含文件与源文件分开。有时人们甚至会影响编译器使用<>来搜索他们自己的

最可移植的做法是使用""来包含项目中的文件,而使用<>仅用于实现提供的文件。此外,至少对于小型到中等规模的项目,最简单的方法是将所有文件收集在一个地方(即一个目录)。这样可以最大限度地减少构建管理和可移植性的麻烦。