c - 理清 .h 依赖项

标签 c dependencies projects

当您有一组 .h 文件成为经典的“戈尔迪安结”情况的受害者时,您会怎么做,#include 一个 .h 意味着您最终包括了几乎所有文件?预防显然是最好的药物,但是如果这种情况发生在供应商 (!) 运送图书馆之前,您会怎么做?

这是问题的扩展,这可能是更相关的问题 -- 您是否应该首先尝试解开依赖关系?

最佳答案

我已经在已经拆分成许多库的 C++ 代码库上完成了这项工作(这是一个好的开始)。

我必须锻炼(或猜测)哪个库最依赖,而它不依赖于代码库中的任何其他内容。然后我依次处理每个库。

我依次查看了每个模块(*.cpp 文件)并确保它自己的头文件首先被 #included 并注释掉其余部分,然后我注释掉该头文件中的所有 #includes 然后重新编译只是那个让编译器告诉我需要什么的模块。我会取消注释似乎需要的第一个标题,并审查那个标题,必要时重复。有趣的是,有多少 header 最终不再需要。

在只需要名字的地方(因为你有一个指针或引用)使用class name;struct name;,这被称为前向声明并避免#including头文件。

当您注释掉 #includes 时,编译器会非常有帮助地告诉您依赖项是什么(您需要使用所有必须保持可移植性的编译器重新编译)。

有时我不得不在库之间移动模块,这样就没有成对或成组的库相互依赖。

关于c - 理清 .h 依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/962397/

相关文章:

java - 库开发中如何正确使用Java访问修饰符

c++ - 共享代码布局

python - 在 Python 项目之间共享设置\常量

c - 将 char 类型转换为 int(用于套接字)

连接两个 int 数组

c++ - 混合 C 和 C++ 的预编译头文件

java - 标记为重复的 HttpClient 依赖项

android - 带有Android Studio的android-maps-utils文件夹

c++ - 在不同项目中使用 header 时出现 LINK2001 错误

c - 多重定义 ... 链接器错误