当您有一组 .h 文件成为经典的“戈尔迪安结”情况的受害者时,您会怎么做,#include 一个 .h 意味着您最终包括了几乎所有文件?预防显然是最好的药物,但是如果这种情况发生在供应商 (!) 运送图书馆之前,您会怎么做?
这是问题的扩展,这可能是更相关的问题 -- 您是否应该首先尝试解开依赖关系?
最佳答案
我已经在已经拆分成许多库的 C++ 代码库上完成了这项工作(这是一个好的开始)。
我必须锻炼(或猜测)哪个库最依赖,而它不依赖于代码库中的任何其他内容。然后我依次处理每个库。
我依次查看了每个模块(*.cpp 文件)并确保它自己的头文件首先被 #included 并注释掉其余部分,然后我注释掉该头文件中的所有 #includes 然后重新编译只是那个让编译器告诉我需要什么的模块。我会取消注释似乎需要的第一个标题,并审查那个标题,必要时重复。有趣的是,有多少 header 最终不再需要。
在只需要名字的地方(因为你有一个指针或引用)使用class name;
或struct name;
,这被称为前向声明并避免#including头文件。
当您注释掉 #includes 时,编译器会非常有帮助地告诉您依赖项是什么(您需要使用所有必须保持可移植性的编译器重新编译)。
有时我不得不在库之间移动模块,这样就没有成对或成组的库相互依赖。
关于c - 理清 .h 依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/962397/