【问题标题】:Is it better practice to include "flint.h" or "flint/flint.h"包含“flint.h”或“flint/flint.h”是更好的做法吗
【发布时间】:2014-12-15 15:10:06
【问题描述】:

Flint 库将所有​​标头放入$PREFIX/include/flint/Arb 库然后包含 Flint 标头。对于 Arb 来说,将它们包括在内,这两者中的哪一个更好:

  1. #include "flint.h"
  2. #include "flint/flint.h"

优点/缺点:

如果 Arb 和 Flint 安装在 /usr/include 中(例如在 Debian 中),那么使用 2.,用户无需执行任何操作,但使用 1.,用户需要使用 -I/usr/include/flint

所以 2. 的优点是使用 Arb 库的用户只需要为所有需要的库指定包含路径 (-I) 到 $PREFIX/include。对于 1.,必须包含路径 $PREFIX/include/flint,所以这似乎需要更多的工作。

【问题讨论】:

  • 我个人更喜欢2.形式。
  • 如果其他人在另一个项目中也有一个 flint.h 并且您也需要使用该文件怎么办?您将需要使用“flint/..”形式。所以从一开始就坚持下去。
  • 为什么这个问题应该以基于意见的方式结束?有一个令人信服的技术论点为什么应该首选第二种形式。
  • 没错,下面的两个答案(@pmr,@piokuc)都表明 2. 是要走的路。谢谢两位的回答!
  • 使用文档建议的内容。 Flint 2.4.4 文档包含对#include "flint.h" 的引用;除非您确定自己知道自己在做什么,否则请遵循它。

标签: c++ c header-files include-path subdirectory


【解决方案1】:

始终使用相对于/usr/include 的路径。这样,您的代码将在大多数 UNIX 系统上开箱即用,并避免名称冲突(想想标题 util.h)。

一旦您的项目需要移植到对开发人员不太友好的平台(主要是 Windows),您的构建系统就需要确定依赖项的位置并设置适当的编译器开关。

【讨论】:

  • 谢谢!所以 2. 是要走的路。
【解决方案2】:

库的开发者倾向于将类 A 放入头文件 A.h。如果您使用两个恰好具有相同名称的类的库,则可能会包含来自错误库的标头,具体取决于通过 -I 传递的包含目录的顺序。有时确实会发生。 C++ 命名空间机制在这里没有帮助。这样做:

#include "x/A.h"

而不仅仅是

#include "A.h"

可以帮助您避免此类名称冲突,并确保包含 x 库中的 A.h,而不是例如 y 库中的 A.h。

【讨论】:

    猜你喜欢
    • 2019-10-17
    • 1970-01-01
    • 1970-01-01
    • 2010-11-28
    • 2019-04-06
    • 2020-05-19
    • 1970-01-01
    • 2023-03-17
    相关资源
    最近更新 更多