我已经阅读了有关此主题的所有内容,包括本网站上的一些非常有用的讨论,NASA编码指南和Google C++指南.我甚至买了这里推荐的"物理C++设计"书(对不起,忘记了名字)并从中得到了一些有用的想法.大多数消息来源似乎都同意 - 头文件应该是自包含的,即它们包含他们需要的内容,以便cpp文件可以包含头而不包括任何其他文件并且它将编译.我也得到关于前方声明的观点,而不是尽可能包括在内.
那说,如果foo.cpp包括bar.h和qux.h,但事实证明它bar.h本身包括qux.h?那么应该foo.cpp避免包括qux.h?亲:清理foo.cpp(减少"噪音").Con:如果有人将bar.h更改为不再包含qux.h,则foo.cpp神秘地开始无法编译.也导致依赖关系,foo.cpp而qux.h不是显而易见的.
如果您的答案是"cpp文件应该#include它需要的每个标题",那么就会得出它的逻辑结论,这意味着几乎每个cpp文件都必须#include <string>, <cstddef>等等,因为大多数代码最终会使用它们,如果你不是应该依赖包括它们在内的其他一些标题,你的cpp需要明确地包含它们.这似乎是cpp文件中的很多"噪音".
思考?
以前的讨论:
ETA:受到此前讨论的启发,我编写了一个Perl脚本来连续注释掉每个'include'和'using',然后尝试重新编译源文件,找出不需要的东西.我还想出了如何将它与VS 2005集成,因此您可以双击以转到"未使用"包含.如果有人想要它让我知道......现在非常实验.
如果你的答案是"cpp文件应该是
#include它需要的每个标题",那么就得出它的逻辑结论,这意味着几乎每个cpp文件都必须#include <string>, <cstddef>等等,因为大多数代码最终会使用那些,如果你不应该依赖包括它们在内的其他一些标题,你的cpp需要明确地包含它们.
对.这就是我喜欢它的方式.
如果"噪音"太多无法承受,那么可以使用包含通常的常用包含的"全局"包含文件(如stdafx.h在许多Windows程序中),并在每个.cpp文件的开头包含该文件(这也有助于预编译头文件).
| 归档时间: |
|
| 查看次数: |
1470 次 |
| 最近记录: |