微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

大型项目的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文件(也有助于预编译头文件).

原文地址:https://www.jb51.cc/c/111854.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐