【问题标题】:Which type of #include ("" or <>) when writing a library in C/C++ [duplicate]用 C/C++ 编写库时使用哪种类型的#include(“”或<>)[重复]
【发布时间】:2019-04-23 21:40:02
【问题描述】:

我正在用 C++ 编写一个库。该库有多个头文件和 cpp 文件,需要跨平台(Windows Visual Studio 和 Linux gcc)。构建时,库和头文件安装在某个系统目录中,同一台机器上的其他代码可以在其中找到它们(例如 Linux 系统上的 /usr/local)。

如果我的一个标题需要#include 我的其他标题之一,那么我应该使用尖括号还是引号?

我觉得尖括号是安装库后应该使用的,以便检查系统目录,但是在构建库时我需要使用引号以便检查本地目录并且我不选择输出系统目录中的日期版本。

我知道#include &lt;filename&gt;#include “filename” 的不同版本是什么意思。对于写库的情况,我问哪个合适,为什么合适。

【问题讨论】:

  • 最好将需要库“安装”的场景设为可选或完全省略它。 Windows 甚至没有为任何特定语言安装库的概念,甚至在 Linux 上的开发通常也无需接触那些预定义的路径即可执行。
  • 这个问题不是重复的,因为它不是关于使用尖括号和双引号之间的技术差异,而是关于在编写库时使用哪个(并且至少有两个原因不使用角度本例中的括号,其中一个已由提问者提供)。

标签: c++ c dll include lib


【解决方案1】:

如果你使用"...",编译器会先搜索本地目录,再搜索系统目录。

如果你使用&lt;...&gt;,编译器会搜索系统目录。

用户库通常与程序一起存在。所以你可以使用"..."

在任何情况下,您都可以使用 IDE 或 make 文件添加其他搜索路径。

【讨论】:

    【解决方案2】:

    使用尖括号时,编译器会在包含路径列表中搜索文件。 当你使用双引号时,它首先搜索当前目录(即正在编译的模块所在的目录),然后才会搜索包含路径列表。

    因此,按照惯例,标准包含使用尖括号,其他所有内容使用双引号。这可确保在(不推荐)您拥有与标准标头同名的本地标头的情况下,将在每种情况下选择正确的标头。

    更多详情请参考以下 SO 答案

    Difference between angle bracket < > and double quotes " " while including header files in C++?

    【讨论】:

      【解决方案3】:

      如果您的工作目录中的标题,您应该使用"" 但, 如果系统路径或包含路径中的标头应使用&lt;&gt;.

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-04-24
        • 1970-01-01
        • 2020-10-18
        • 2020-08-16
        • 1970-01-01
        • 2013-05-17
        • 2015-02-15
        相关资源
        最近更新 更多