有没有办法警告我全球命名空间污染?

Shi*_*llo 9 c++ warnings namespaces

gcc(或任何其他编译器)是否有选项可以警告全局命名空间污染?

我试图编译一个示例应用程序套件,但事实证明,这些示例的一些头文件受到全局命名空间污染(using namespace在头文件中)的影响,因此Mac OS X全局结构Rect变得模棱两可.我还试图改变#include的顺序,以便在雷区之前解析系统的Rect符号using namespace,但这导致一些符号最终没有被解析.

我之前使用谷歌的搜索失败了,但预感很差,如果存在这种警告选项,请给我信息.

Mat*_* M. 5

我不知道 gcc,但 CLang 有它:

def warn_using_directive_in_header : Warning<
  "using namespace directive in global context in header">,
  InGroup<HeaderHygiene>, DefaultIgnore;
Run Code Online (Sandbox Code Playgroud)

您可以直接使用-Wusing-directive-in-header或通过群组激活它-Wheader-hygiene(目前它是群组的唯一成员)。

它已在邮件列表中进行了彻底审查,通常不会对常规案例发出警告。