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

马尔默

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

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) {} };犯错(并且g ++抓住了这一点,因为它不符合标准)。我们的问题是按名称空间而不是按类型进行过度限定

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

马尔默

好吧,我写了我自己的。

我做了一个GitHub的仓库吧,在这里这是我为类似的代码质量任务(复杂程度较低)使用的一些旧脚本的重构/概括。

我最初尝试将其基于CPIP,但发现它有点小问题,而且速度太慢。取而代之的是,当前版本基于令人发指的令人讨厌的自制程序词法分析器,但该词法编辑器速度很快(但实际上并不是预处理程序)。确实会导致许多限制和误报,这些都已记录在案。

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

希望这对将来的人有所帮助!看看这个!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

编译器可以优化不必要的比较吗?

不必要使用未命名的命名空间C ++

GLSL编译器会删除不必要的变量初始化吗?

难道Java编译器优化不必要的三元运算符?

防止tsc编译器省略不必要的外部模块

Rust编译器会自动删除不必要的中间变量吗?

Tiny C编译器生成的代码会发出额外的(不必要的)NOP和JMP

在将可空枚举与它们的基础基元之间进行强制转换时,奇怪的/不必要的编译器输出

OutLook呈现不必要的空间

摆脱jfreechart chartpanel不必要的空间

AlertDIalog删除不必要的空间

C语言中的一个空循环。编译器会生成大量不必要的代码吗,还是我错过了某些事情?

不必要的转义字符警告

Cython发出“不必要的”警告

SBT不必要的重新编译

为什么编译器与继承中的命名空间冲突

Python slimit最小化器不必要的警告输出

rpivotTable:删除不必要的聚合器

什么是可能的 Javascript 约定/模式来避免 React 类/组件造成不必要的命名空间污染

Dagger编译器警告

C#方法分配不必要的堆栈空间?

面板在ExtJ中占用了不必要的巨大空间

Composite 和 ScrolledComposite 占据不必要的空间

数据表分页按钮-删除不必要的空间

使用 bootstrap 布局,右侧有多余的不必要的空间

浮动增加了不必要的空间

删除图像的ListView中不必要的空间

右侧带有不必要空间的SQL数据

如何摆脱CSS中按钮之间不必要的空间