理清 .h 依赖关系

Jus*_*eff 4 c dependencies projects

当您的一组 .h 文件陷入了经典“棘手问题”的情况(#include 一个 .h 意味着您最终会包含几乎所有文件)时,您会怎么做?预防显然是最好的良药,但是如果在供应商(!)发货之前发生这种情况,您该怎么办?

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

qua*_*ana 5

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

我必须弄清楚(或猜测)哪个库是最依赖的,它不依赖于代码库中的其他任何东西。然后我依次处理每个库。

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

如果只需要名称(因为您有指针或引用),请使用class name;struct name;,这称为前向声明并避免 #include 头文件。

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

有时我必须在库之间移动模块,以便没有成对或成组的库相互依赖。