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

前端之家收集整理的这篇文章主要介绍了大型项目的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&C++相关文章