我有很多代码在功能上是这样的:
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)。
我找不到启用对我们有帮助的警告,而且很难用 Google 搜索,因为人们会生成 class A { void A::method(void) {} };
错误 a很多(并且 g++ 捕获了这一点,因为它不符合标准)。我们的问题是命名空间,而不是类型。
那么,我应该(至少)在上述编译器之一中启用什么警告?还有其他解决方案吗?
最佳答案
好吧,我自己写的。
我在github上为它做了一个仓库,here .它是我为类似的代码质量任务(复杂性较低)使用的一些旧脚本的重构/概括。
我最初尝试将其基于 CPIP ,我发现它有点问题而且太慢了。取而代之的是,当前版本是基于一个非常快的自制词法分析器(但实际上并不是预处理器)。这确实会导致许多限制和误报,这些都已记录在案。
但是,原型(prototype)对我们来说非常成功。我们能够在几个小时内删除我们遗漏的所有问题,误报(由于假预处理的限制)仅出现在 4 个文件(共 829 个)中。
我希望这对 future 的人有所帮助!检查一下!
关于c++ - 不必要命名空间的编译器警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29293136/