2010-11-19 48 views
6

我刚想出一个想法来解决问题并想分享它。对不起,如果太平庸。解决隐含的想法包含在C,C++中

因此,我正在审查的一个大型C++项目包含许多依赖于其他包含符号但不包括所需包含的符号。构建过程中的任何轻微更改都会导致“丢失符号”失败。

因此,为了一次检查所有包含的自遏制,我搜索所有* .h,创建一个cpp文件,其中只包含#include -statement这个.h文件并尝试编译它。最后,我获得了“好”和“坏”包含文件的列表。 酷是不是:-) 还是有更容易的解决方案吗?

+2

如果要在编译器选项中启用隐式声明警告并将警告视为错误,您是不是也会捕获这些警告? – tdammers 2010-11-19 11:37:37

+2

-1:当然,很酷的想法,但这不是一个真正的问题。 – 2010-11-19 11:37:54

+1

@Andres:问题警察先生,这是一个问题,它询问是否有更好的方法来实现同样的效果 – 2010-11-19 11:38:49

回答

12

如果每个.cpp文件首先包含它自己的头文件,然后包含其他头文件,那么您将在不使用外部工具的情况下获得此检查。

这实际上是由于相同的原因的Googles C++ Style Guide部分:

的优选排序降低隐藏 依赖性。我们希望每个标题文件 都可以自行编译。 达到此目的的最简单方法是使 确保其中每个都是 第一个.h文件#included在某些.cc中。

如果你有任何头文件没有相应的.cpp文件,你必须为他们做一些特殊的事情。

+0

+1谢谢!我总是使用这种包含方法,但不记得并且争辩原因。现在我明白了!也感谢您指向谷歌风格指南! – 2010-11-19 12:00:06

+1

不幸的是,你不能使用这种风格的预编译头文件:\ – Inverse 2010-11-19 17:35:03

+0

@Inverse:有趣!我从来没有用过它们,真是太遗憾了:-( – 2010-11-19 22:41:25

1

这已经很多年了,但我相信Lint会为你做这个。我似乎记得,林特还会告诉你何时一个文件被包含在前向声明中。

+0

好的,谢谢!在这个客户代码中,我甚至见过很多lint编译指示,我应该问他们他们如何处理这个lint警告。可能被压制: - ) – 2010-11-19 12:03:32

+1

我记得在林特的所有警告中笑了起来。 120万个错误,并且花了大部分的周末来运行。最好关闭所有警告并慢慢打开它们,修理你需要的东西然后继续下一步。我只对15个左右感兴趣。 – 2010-11-19 13:17:23