包含"flint.h"或"flint/flint.h"是更好的做法吗?
Is it better practice to include "flint.h" or "flint/flint.h"
Flint库将所有头放入$PREFIX/include/flint/
中。Arb库随后包含Flint标头。对于Arb来说,这两种方法中哪一种更好:
#include "flint.h"
#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库中的。
相关文章:
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 编译包含字符串的代码时遇到问题
- c++库的公共头文件中应该包含什么
- 将包含C样式数组的对象初始化为成员变量(C++)
- 是否需要删除包含对象的"pair"?
- 函数何时会在c++中包含stack_Unwind_Resume调用
- 如何将包含epoch时间的十六进制字符串转换为time_t
- 使用mongocxx驱动程序时包含头文件问题
- 如何在h文件中包含.o对象文件
- 在混合代码库中将C转换为C++时出现许多包含错误
- VS2017,C++包含目录与附加包含目录,子文件夹包含失败-但为什么
- cmath抛出错误C2062、C2059、C2143和C2447.cmath包含在矢量文件中
- 为什么您需要C++头文件的包含保护
- 无法在UE4中包含BP类到CPP类
- g++ 说函数不存在,即使包含正确的标头
- 在C++代码中包含opencv时,使用ctypes创建.so文件
- Visual C++GC接口如何启用它以及要包含哪个库
- 当调用switch语句中的函数时(即使函数不包含循环),似乎是永不结束的循环的问题
- 包含"flint.h"或"flint/flint.h"是更好的做法吗?