如果你有一组.h文件已经成为经典的“gordian结”情况的受害者,你会怎么做?#include one .h意味着你最终包括几乎整个地段?预防显然是最好的药物,但是如果在供应商(!)运送库之前发生了
这是问题的扩展,这可能是更相关的问题 – 你是否应该首先尝试解开依赖关系?
我已经在已经拆分成许多库的C代码库上完成了这个(这是一个好的开始).我不得不锻炼(或猜测)哪个库最依赖,这取决于代码库中的其他内容.然后我依次处理每个库.
我依次查看每个模块(* .cpp文件)并确保它自己的头首先是#included并注释掉其余部分,然后我注释掉了那个头文件中的所有#includes然后重新编译了那个模块让编译器告诉我需要什么.我会取消评论似乎需要的第一个标题,并审核那个标题,并在必要时进行递归.有趣的是看到有多少标头最终不需要.
只需要名称(因为你有一个指针或引用),使用类名;或struct name;,它被称为前向声明并避免#include头文件.
当您注释掉#includes时,编译器非常有助于告诉您依赖性是什么(您需要使用所有编译器重新编译以保持可移植性).
有时我不得不在库之间移动模块,以便没有任何一对或一组库相互依赖.