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

Compiler Warning for Unnecessary Namespaces

我有很多代码在功能上是这样的:

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);

}}}

我们通过开始删除庞大、庞大的代码库中出现的此类事件,节省了(令人尴尬的)文本 space。然而,它进展缓慢且容易出错,因为我们是通过 vgrep 来完成的。

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

我找不到可以帮助我们的警告,而且很难 Google 因为人们经常犯 class A { void A::method(void) {} }; 错误(g++ 捕捉到这个,因为它不是标准的- 兼容)。我们的问题是 namespace 而不是 type.

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

嗯,我自己写的。

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

我最初尝试以 CPIP 为基础,但我发现它有点问题而且速度太慢。取而代之的是,当前版本是基于一个非常快的自制词法分析器(但实际上并不是预处理器)。这确实会导致许多限制和误报,这些都已记录在案。

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

我希望这对未来的人有所帮助!看看吧!