gcc(或任何其他编译器)是否有一个选项可以警告我全局命名空间的污染?
我尝试编译一个样例应用程序套件,但结果发现其中很多头文件都存在全局命名空间污染(在头文件中使用using namespace
),导致 Mac OS X 的全局结构体 Rect 变得不明确。我还尝试更改 #include 的顺序以先解析系统的 Rect 符号,然后再解决using namespace
的问题,但这会导致一些符号无法解析。
我之前在 Google 上搜索失败了,但如果存在这种警告选项,请给我提供信息。
gcc(或任何其他编译器)是否有一个选项可以警告我全局命名空间的污染?
我尝试编译一个样例应用程序套件,但结果发现其中很多头文件都存在全局命名空间污染(在头文件中使用using namespace
),导致 Mac OS X 的全局结构体 Rect 变得不明确。我还尝试更改 #include 的顺序以先解析系统的 Rect 符号,然后再解决using namespace
的问题,但这会导致一些符号无法解析。
我之前在 Google 上搜索失败了,但如果存在这种警告选项,请给我提供信息。
我不知道gcc是否有这个功能,但CLang有:
def warn_using_directive_in_header : Warning<
"using namespace directive in global context in header">,
InGroup<HeaderHygiene>, DefaultIgnore;
您可以直接使用-Wusing-directive-in-header
或通过组-Wheader-hygiene
来激活它(目前,它是该组的唯一成员)。
它已经在邮件列表上进行了彻底的审查,并且通常不会警告常规情况。
using namespace
实例。 - Potatoswatterusing
声明都应该被删除;只是全局的那些(也就是OP的主题)。 - justinusing namespace
实例似乎存在问题(源代码不少)。我知道我必须自己处理它们才能摆脱它们。但是,如果存在我所描述的警告选项,开发人员本身就会对全局范围内的using namespace
持谨慎态度,这样可以避免我要经历的心理劳动。叹气 - Shigerellousing
用法,我意识到我的评论并不是对你的问题的直接回答(如果没有适当的答案来解决你的程序,则是间接回答)。如果你的目标是OSX,那么Matthieu M.的回答应该可以解决问题,如果你的程序在此时与clang兼容。如果我知道这个标志的存在,那就是我要留下的答案。 - justin