C++ 有没有办法警告我全局命名空间污染?
gcc(或任何其他编译器)是否有警告全局命名空间污染的选项 我试图编译一个示例应用程序套件,但结果发现该示例的很多头文件都受到全局名称空间污染(头文件中使用名称空间C++ 有没有办法警告我全局命名空间污染?,c++,namespaces,warnings,C++,Namespaces,Warnings,gcc(或任何其他编译器)是否有警告全局命名空间污染的选项 我试图编译一个示例应用程序套件,但结果发现该示例的很多头文件都受到全局名称空间污染(头文件中使用名称空间)的影响,因此Mac OS X global struct Rect变得模棱两可。 我还尝试更改#include的顺序,以便在使用namespace的雷区之前解析系统的Rect符号,但这导致一些符号最终无法解析 我以前用谷歌搜索失败了,不过预感不好,如果存在这种警告选项,请告诉我相关信息。我不知道gcc,但CLang有: def wa
)的影响,因此Mac OS X global struct Rect变得模棱两可。
我还尝试更改#include的顺序,以便在使用namespace
的雷区之前解析系统的Rect符号,但这导致一些符号最终无法解析
我以前用谷歌搜索失败了,不过预感不好,如果存在这种警告选项,请告诉我相关信息。我不知道gcc,但CLang有:
def warn_using_directive_in_header : Warning<
"using namespace directive in global context in header">,
InGroup<HeaderHygiene>, DefaultIgnore;
def warn_使用_标题中的_指令:警告<
“在标头中的全局上下文中使用命名空间指令”>,
组内,默认忽略;
您可以使用标题中的-Wusing指令直接激活它,或通过组-Wheader hygiene
(目前,它是组中唯一的成员)激活它
邮件列表中已对其进行了彻底审查,通常不会对常规情况发出警告。搜索和删除-这些问题通常会持续/返回,直到被删除。@Justin:问题是,可能有使用命名空间的实例不在全局命名空间中。@Potatoswatter我不想暗示应该删除每个使用声明的;只有全局的(OP的主题)。@Justin@Potatoswatter在34个示例应用程序中使用名称空间
的大约75个实例似乎有问题(不是少量源代码)。我知道我必须自己处理才能摆脱他们。但是,如果我所描述的警告选项存在,那么开发人员自己就会对在全局范围内使用名称空间变得谨慎,并且我必须为此付出的脑力劳动是可以避免的。sigh@Shigerello我理解这个问题,并避免使用
使用许多常见的,我意识到我的评论并不是对您的问题的直接回答(如果没有为您的程序提供合适的答案,则是间接的)。如果你的目标是osx,那么Matthieu M.的回应应该会起到作用,如果你的程序现在与clang兼容的话。如果我知道这个标志存在的话,这就是我留下的答案。嗯,看起来这个警告选项是最近引入的。这些警告选项不适用于“Apple clang 2.0版”和适用于Xcode 4.0.1(/Developer/usr/bin/clang等)的gcc-4.2.1。我希望Xcode 3.2也能做到这一点。但绝对是一个令人愉快的特点。应该合并到gcc中。@Shigerello:这是最近的,我甚至不确定它是否出现在最新的CLang版本(2.9)中。