c++头文件样式

C++ Header style

本文关键字:样式 文件 c++      更新时间:2023-10-16

c++项目中头文件的首选策略是什么:<test.h>还是"test.h" ?根据我的经验,我使用:

  1. #include <test_lib.h>包含C/c++头文件,第三方库(boost等),其路径在项目设置中指定。
  2. #include "my_test.h" -它用于项目中存在的头文件。

这里还可以应用其他实践吗?

是否可以包含相对路径的头文件:如#include "../new_test.h" ?还是将相对路径移动到项目设置中更好?

尖括号用于包含系统头文件。理论上,IIRC,它们甚至不一定是文件。在实践中,<>表示搜索当前目录,只搜索包含路径,而""表示查找当前目录,然后搜索包含路径。

对于相对路径,这可能取决于您的环境,我建议相对于您的项目的路径包括path(由-I指定)。

这篇MSDN文章解释了预处理器如何根据#include语法形式搜索标头。你的风格很好,因为Visual c++, Windows Framework, Boost和其他框架/包的头文件(通常)在你的项目目录之外。

关于你的第二个问题,我的建议是避免相对路径。如果你移动了头文件,你需要通过修改代码来调整相对路径,这不是一个好主意。我宁愿把它放在尖括号内,并将路径添加到/I选项。例如,你想在项目中包含C:frameworksframeworkAincludea.h,你可以使用#include <a.h>I "C:frameworksframeworkAinclude"

这可能是更具描述性的,如果你添加路径到框架根/I,然后把部分路径到它的头尖括号内。例如#include <frameworkAincludea.h>/I "C:frameworks"。现在在代码中可以清楚地看到a.h属于frameworkA

仅对项目目录内的头文件使用相对路径(例如,如果您将代码组织到项目子目录中的模块中,并且不打算四处移动)

  1. 您可以使用其中之一。<test.h>可以通过在编译时使用-I <directory containing test.h>选项来使用。一般来说,这是我遵循的一种实践,我倾向于对所有头文件使用<test.h>,不管它们是第三方头文件还是我编写的头文件。

  2. 避免使用相对路径"../test.h"可能是个好主意。从个人经验来看,这种编写#include语句的方式迫使您巩固目录结构。如果您决定明天将test.h移动到另一个目录,那么您必须进入每个头文件并将test.h的相对路径更改为新路径—这是一项耗时的练习。最好将其转移到makefile(通过-I),然后从那里处理它。