包含"flint.h"或"flint/flint.h"是更好的做法吗?

Is it better practice to include "flint.h" or "flint/flint.h"

本文关键字:flint 包含 更好      更新时间:2023-10-16

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库的用户只需要为所有需要的库指定到$PREFIX/include的包含路径(-I)。对于1.,必须包含路径$PREFIX/include/flint,因此似乎需要做更多的工作。

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

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

库的开发人员倾向于将类a放入头文件a.h中。如果您使用两个碰巧具有相同名称的类的库,则可能会包含错误库的头,这取决于通过-I传递的include目录的顺序。这种情况有时确实会发生。C++命名空间机制在这里没有帮助。这么做:

#include "x/A.h"

而不仅仅是

#include "A.h"

可能有助于避免此类名称冲突,并确保包含x库中的A.h,而不是y库中的。