也就是说,如果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文件(也有助于预编译头文件).