代码之家  ›  专栏  ›  技术社区  ›  geometrian

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

  •  3
  • geometrian  · 技术社区  · 11 年前

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

    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++捕捉到了这一点,因为它不符合标准)。我们的问题是资格过高 命名空间 ,不是由 类型 .

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

    1 回复  |  直到 11 年前
        1
  •  0
  •   geometrian    11 年前

    嗯,我自己写的。

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

    我最初尝试基于 CPIP ,我发现这有点麻烦,而且太慢了。相反,当前版本基于一个惊人的自制lexer,速度极快(但不是真正的预处理器)。这确实会导致一些限制和误报,这些都是有记录的。

    然而,原型已经 极其 我们成功了。我们能够在几个小时内删除所有遗漏的错误,只有4个文件(829个文件中)出现误报(由于伪预处理的限制)。

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