【问题标题】:Restrict namespace pollution in C++ Header限制 C++ 标头中的命名空间污染
【发布时间】:2019-07-22 01:59:59
【问题描述】:

在我们的团队中,我们希望限制在全局范围内的标头中添加“使用命名空间”的做法,因为这不是一个好的做法,并且通常会导致名称冲突和命名空间污染。

在 gcc 中有没有一种方法可以限制在编译时在头文件中添加 using 命名空间的做法?

我的意思是当编译器在全局范围内看到标题“使用命名空间”时得到某种警告。

谢谢

【问题讨论】:

  • 改为安装代码审查流程。您需要一个工具这一事实表明,添加这些不为人知的坏东西太容易了。
  • 据我所知,这不是 gcc 的作用,也不能用它来完成。搜索一些静态分析工具(如 cppCheck)并实施自定义规则会更好,这样您就可以在编译之前运行它并查看所有警告。良好的做法也是获得代码审查流程
  • 虽然我非常同意建议的审查流程,但有时当工具不断向您而不是个人提示时,改变编码习惯会更容易。

标签: c++ gcc namespaces


【解决方案1】:

您可以将clang-tidygoogle build using namespace 检查一起使用,这应该会抱怨这些 using 指令。

【讨论】:

    【解决方案2】:

    只是要把这个扔出去,因为它这个特定情况下非常可行的替代方案:

    在 10 分钟内,您很可能可以使用您选择的任何脚本语言编写一些内容,以遍历您的源代码树并扫描头文件以查找“使用命名空间”。在您的“夜间构建”上自动运行此脚本,如果发现任何此类用法,则构建失败。

    【讨论】:

    • 这可能不像看起来那么简单。在内联函数中使用命名空间怎么样?
    • 当然,有一些极端情况,但在看到需求之前适应它们可能还为时过早,看看替代解决方案的成本(在实施时间)。也许他们有一个永远不会在内联标题函数中这样做的政策?如果是这样,这个方法也可以捕捉到。
    猜你喜欢
    • 2011-06-04
    • 1970-01-01
    • 2016-01-20
    • 2023-04-03
    • 1970-01-01
    • 2011-06-16
    • 1970-01-01
    • 2011-05-14
    • 2014-04-25
    相关资源
    最近更新 更多