大型项目的C头策略(redux)

我已经阅读了我可以在这主题上找到的一切,包括对这个网站的几个非常有帮助的讨论,NASA编码指南和Google C指南.我甚至买了这里推荐的“物理C设计”书(对不起,忘了名字),并得到了一些有用的想法.大多数来源似乎都同意 – 头文件应该是自包含的,即它们包括他们需要的,以便一个cpp文件可以包括头,而不包括任何其他的,它将编译.我也得到关于前进宣告而不是包含的可能性.

也就是说,如果foo.cpp包含了bar.h和qux.h,那么呢呢,原来吧吧吧本身就包含了qux.h?应该foo.cpp然后避免包括qux.h? Pro:清理foo.cpp(减少“噪音”). Con:如果有人将bar.h更改为不再包含qux.h,foo.cpp会神秘地开始无法编译.还会导致foo.cpp和qux.h之间的依赖关系不明显.

如果你的答案是“一个cpp文件,应该#include每个标题,它需要”,采取其逻辑结论,这意味着几乎每个cpp文件必须#include< string>< cstddef>等等,因为大多数代码将最终使用这些代码,如果您不应该依赖于其他头文件,那么您的cpp需要明确地包含它们.这似乎在cpp文件中有很多“噪音”.

思考?

以前的讨论:

What are some techniques for limiting compilation dependencies in C++ projects?

Your preferred C/C++ header policy for big projects?

How do I automate finding unused #include directives?

ETA:以前在这里的讨论启发,我已经写了一个Perl脚本来连续地排除每个“包含”和“使用”,然后尝试重新编译源文件,找出不需要的内容.我也想出了如何将它与VS 2005整合,所以你可以双击进入“未使用”的包括.如果有人想让它让我知道…现在非常实验.

解决方法

If your answer is “a cpp file should #include every header it needs”,taken to its logical conclusion that would mean that pretty much every cpp file has to #include <string>,<cstddef> etc. since most code will end up using those,and if you’re not supposed to rely on some other header including them,your cpp needs to include them explicitly.

对.这就是我喜欢的方式.

如果“噪音”太大,可以有一个包含通常的常用的包含(包括许多Windows程序中的stdafx.h)的“全局”包含文件,并且包括在开始时每个.cpp文件(也有助于预编译头文件).

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...