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

3

我有很多代码的功能都像这样:

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 进行操作,所以进展缓慢且容易出错。
理想情况下,编译器应该会发出警告。我们的代码库在三个不同的平台上支持三种不同的编译器(MSVC、g++ 和 Clang),分别为 Windows、Linux 和 Mac。
我找不到任何有用的警告来帮助我们解决问题,而且很难进行谷歌搜索,因为人们经常犯 class A { void A::method(void) {} }; 错误(而 g++ 会捕获此类错误,因为它不符合标准)。我们的问题是由于 namespace 的过度限定而不是 type
那么,在上述至少一个编译器中,我应该启用哪个警告呢?还有其他解决方案吗?

三个命名空间并不算太深,所以我相信即使是PCLint也可能会抱怨那个...在Visual C++中可以找到的“额外”警告类型在这里介绍。 - Chuck Walbourn
编译器警告通常是因为代码可能会导致错误而提供的。问题在于,完全限定名称不可能成为问题,因此怀疑不会有警告。如果被任何东西捕获,那就是样式检查器。 - MuertoExcobito
1个回答

0

好的,我自己写了一个。

我在github上为它创建了一个存储库,在这里。这是一些旧脚本的重构/泛化,用于类似代码质量任务(较低复杂度)。

我最初尝试基于CPIP,但我发现它有点有bug,而且速度太慢了。相反,当前版本基于一个可怕的自制词法分析器,速度非常快(但不是真正的预处理器)。这确实会导致许多限制和误报,这些都有记录。

然而,这个原型对我们来说已经非常成功了。我们能够在几个小时内删除所有遗漏的垃圾,只有4个文件(共829个)出现了假阳性(由于虚假预处理的限制)。

我希望这能帮助未来的某个人!去看看吧!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接