开发C++库时,内部头文件应使用引号还是尖括号包含?
C++库内部头文件引用方式的选择
我正在开发一个名为foo的C++库:
- 安装到
/some/where路径时,头文件会存放在/some/where/include/foo目录下 - 要求用户编译时添加
-I/some/where/include参数 - 库内包含的头文件有
foo/first.hpp、foo/second.hpp和foo/bar/third.hpp,安装前后它们的相对路径保持不变
现在我有个疑问:在这些头文件中引用同库的其他头文件时,应该采用哪种方式?
可选方式
- 始终使用尖括号,和用户的使用方式保持一致:
#include <foo/second.hpp> #include <foo/bar/third.hpp>
- 完全不使用尖括号,只使用引号形式:
同目录下的引用示例:
#include "second.hpp" #include "bar/third.hpp"
跨目录相对路径引用示例:
#include "../first.hpp"
- 部分场景用尖括号,其他场景用引号
我的困惑
我注意到Boost库采用的是第一种方式,个人也倾向于此——这种方式能明确表明这些头文件属于foo库。但我看到有个针对C语言的问题,其采纳答案建议使用第二种方式。
另外,C++核心准则SF.12的表述比较模糊:
对于与当前文件存在相对路径(同一组件或项目内)的头文件,优先使用引号形式包含,其他情况使用尖括号形式
库开发者应将头文件放在专属文件夹中,让客户端通过#include <some_library/common.h>来包含
库本身也是自身头文件的使用者,既然头文件已经放在专属文件夹里,或许应该遵循后者的规则?
内容的提问来源于stack exchange,提问作者einpoklum
相关产品推荐
相关产品推荐

