在c++中排列头文件

arranging the header files in c++

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

我正在为我的大学做一个项目,然后出现了一个问题。我知道是时候回到这里了。

有许多文件(10-12..对我来说太多了),每个都有一个头文件。我创建了单独的文件夹,如:

注册目录:RegistersName.h注册.h(* ==对应的cpp)文件*.cpp
数据库目录:RegisterDB.h InstructionDB.h *.cpp
指令目录:instruction .h *.cpp
编译文件夹:Compiler.h *.cpp
命令目录:Command.h *.cpp

现在这些头文件中的许多都是"看到"彼此,因此我必须包含它们…

应该包括

吗?

#include "../Database/RegisterDB.h"
#include "../Register/Register.h"
#include "../Register/RegistersName.h"

我真诚地认为那不是写作的方式。因为到处移动一些文件会毁了整个项目。请给我指路。

谢谢你每次都帮我。

一定要跳过使用..的相对寻址,因为一定要增加耦合。

您可以将项目目录添加到包含路径中(但是在构建系统中是这样做的),并包含

#include "Database/RegisterDB.h"
#include "Register/Register.h"

如果你觉得它们是应该分开保存的"子项目"。

您的每个包含文件都应该有一个 include Guard。这可以防止头文件被意外地包含多次。

每个源文件都应该包含所有所需的头文件。不要喜欢通过包含其他头文件来包含头文件,而要单独包含源文件中需要的每个文件,这避免了如果某些头文件不再需要并被删除,那么您将陷入编译错误的惨败,如果特定的头文件包含一些其他需要的头文件。

将包含的所有路径添加到包含路径中,这样您就不必在包含时使用显式的路径提及。

如果你有循环依赖,你可以使用类型的前向声明来通过

#include语句应该排序分组。请参阅c++编程风格指南和Stackoverflow线程-使用c++头文件的最佳实践。

#include "app/Database/RegisterDB.h"
#include "app/Register/Register.h"
#include "app/Register/RegistersName.h"

是的,移动头文件将意味着您必须修复这些包含。但是如果你必须包含,你必须包含…

问题是你是否真的必须在其他头中包含头?有时需要这样做,例如,如果一个类继承自另一个类。但有时人们在应该只在源文件中包含头文件时,却在另一个头文件中包含头文件。因此,请确保这里没有创建不必要的耦合。例如,是否编译器类的所有用户也必须使用来自RegisterDB类的东西?或者它是一个实现细节,因此应该只包含在Compiler.cpp中?