不必要的命名空间的编译器警告

时间:2015-03-27 04:08:26

标签: c++ visual-c++ g++ clang

我有很多功能如下的代码:

namespace Foo { namespace Bar { namespace Baz {

class MyType {};

Foo::Bar::Baz::MyType func(Foo::Bar::Baz::MyType const& param);

}}}

由于MyType没有任何相互矛盾的定义,因此可以轻松简化:

namespace Foo { namespace Bar { namespace Baz {

class MyType {};

MyType func(MyType const& param);

}}}

我们通过在我们庞大而广泛的代码库中删除这些类型的事件来保存(令人尴尬的数量)文本空间。但是,由于我们是通过vgrep进行的,所以它很慢并且容易出错。

理想情况下,会有编译器警告。我们的代码库分别在三个不同的平台(Windows,Linux和Mac)上支持三种不同的编译器(MSVC,g ++和Clang)。

我无法找到警告以启用这对我们有帮助,因为人们很多地犯了class A { void A::method(void) {} };错误(并且g ++抓住了这个,因为它不符合标准),因此谷歌很难。我们的问题是 namespace 过度资格,而不是 type

那么,我应该在(至少)上面的一个编译器中启用什么警告?还有其他解决方案吗?

1 个答案:

答案 0 :(得分:0)

好吧,我自己写了。

我在github上创建了一个存储库,here。它是我对类似代码质量任务(复杂性较低)的一些旧脚本的重构/概括。

我最初尝试将它基于CPIP,我发现它是一个小马车并且太慢了。相反,当前的版本是基于一个可怕的bletcherous自制词法分析器,它的速度非常快(但实际上并不是一个预处理器)。这确实会导致许多限制和误报,并记录在案。

但是,原型对我们来说非常成功。我们能够在几个小时内删除我们错过的所有错误,只有4个文件(829个)中出现误报(由于假预处理的限制)。

我希望这可以帮助未来的某个人!看看吧!