C ++标题样式

时间:2011-11-09 09:19:30

标签: c++ header include

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

  1. #include <test_lib.h>包括C / C ++标题,第三方库(boost等)在项目设置中指定的路径。
  2. #include "my_test.h" - 它用于项目中存在的头文件。
  3. 这里可以应用其他任何做法吗?

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

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

关于你的第二个问题,我的建议是避免相对路径。如果你移动那个标题,你需要通过改变代码来调整相对路径,这是一个坏主意。我宁愿把它放在尖括号内,并将路径添加到/I选项。例如。要在项目中加入C:\frameworks\frameworkA\include\a.h,可以使用#include <a.h>\I "C:\frameworks\frameworkA\include"

如果您将框架根目录添加到/I,然后将部分路径放在尖括号内的标题中,则可能更具描述性。例如。 #include <frameworkA\include\a.h>/I "C:\frameworks"。现在,代码中很明显a.h属于frameworkA

仅对项目目录中的标题使用相对路径(例如,如果将代码组织到项目子目录中的模块中,并且不打算移动它们)。

答案 2 :(得分:0)

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

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