C ++项目中头文件的首选策略是什么:<test.h>
或"test.h"
?
根据我的经验,我使用:
#include <test_lib.h>
包括C / C ++标题,第三方库(boost等)在项目设置中指定的路径。#include "my_test.h"
- 它用于项目中存在的头文件。这里可以应用其他任何做法吗?
是否可以包含具有相对路径的头文件:如#include "../new_test.h"
?或者将相对路径移动到项目设置是否更好?
答案 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)
您可以使用其中之一。编译时可以使用<test.h>
选项来使用-I <directory containing test.h>
。一般来说,这是我遵循的一种做法,我倾向于对所有头文件使用<test.h>
,无论它们是第三方头文件还是我编写的头文件。
避免使用相对路径"../test.h"
可能是个好主意。从个人经验来看,这种写#include
语句的方式迫使你巩固你的目录结构。如果您决定明天将test.h
移动到另一个目录,则必须进入每个头文件并将test.h
的相对路径更改为新路径 - 这是一项耗时的练习。最好将其转移到makefile(通过-I
),然后从那里处理它。