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

标签 c++ visual-c++ g++ clang

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

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/

相关文章:

c++ - 我无法理解为什么在此 for 循环中输出为 10

c++ - 将 C++ 中的原始字符串数据传递给 Python 程序

c++ - 无法编译。头文件。封闭自己的对象定义

api - 如何使用visual c++在win32 API中创建圆形/圆形按钮

c++ - 如果将输入流发送到输出流会发生什么?

c++ - 在另一台电脑上执行程序时加载 SDL2 共享库时出错

c++ - 将 vector 复制到 vector

c++ - 启动服务器时出现 std::exception (WinSock2)

c++ - g++ 和严格溢出的问题

c++ - 使用 C 和 C++ 绑定(bind)链接到库