LLVM编译器2.0:"using namespace std;"出现警告

20
在使用LLVM 2.0的Xcode中,当我在我的C++代码中添加using namespace std;这一行时,会出现以下警告:

语义问题
使用指令引用了隐含定义的命名空间'std'

有没有办法修复它?为什么会出现这个警告?


1
你只是放了那一行代码吗? - GManNickG
2
你是否包含了任何具有该命名空间的头文件? - JoshD
2
Xcode 4仍然受NDA保护;您应该在苹果的beta dev论坛中提出这个问题,这是您与苹果签订的NDA允许您提问的唯一论坛。(https://devforums.apple.com/community/xcode4 -- 需要您的苹果开发者计划登录才能阅读/发布) - Jason Coco
1
GCC允许文件在没有任何标准包含的情况下使用using namespace std;。这不符合规范,因此clang会发出警告。 - Johannes Schaub - litb
1
它包含其他的引用,例如 using namespace std;#include <iostream>。另一个是 #include "sqlite3.h"。该类已经完成;无论我添加哪个 C++ 头文件,都会出现 using namespace std; - jstm88
4个回答

29

你是否包含了任何标准头文件?否则编译器就不知道 namespace std 是什么。

请贴出更多代码以澄清问题。


4
啊,我明白了。你说得对,using namespace std; 这行代码是文件中除了 #ifndef#define 语句之外的第一行代码;我将它移动到了 #include <iostream> 这行代码之后,警告消失了。GCC从来没有给出过这个警告,所以我之前从来没有想过这个问题。谢谢! - jstm88

9
将 using namespace std 移到 #include 后面可以消除此警告。

7
我这样解决了这个问题。
#include <iostream>

using namespace std;
/// This function is used to ensure that a floating point number is
/// not a NaN or infinity.
inline bool b2IsValid(float32 x)
{
    if (x != x)
    {
        // NaN.
        return false;
    }
    float32 infinity = std::numeric_limits <float32>::infinity();
    return -infinity < x && x < infinity;
    return true;

}

-1

我看到这个问题已经很老了,但是对于未来查看此内容的任何人,我想添加LLVM文档中的此链接作为讨论的补充和寻找更多信息的人:

LLVM编码标准:不要使用using namespace std;

我认为标题已经非常明显,说明了我为什么分享它以帮助解决这个问题。

在LLVM中,我们更喜欢使用“std ::”前缀显式地为标准命名空间中的所有标识符添加前缀,而不是依赖于“using namespace std;”。

在头文件中,添加“using namespace XXX”指令会污染任何包含头文件的源文件的命名空间。这显然是一件坏事。

编辑: 因此,不要使用'using std namespace;',而是在每个需要使用标准库的情况下显式地键入std ::。它避免了与源文件命名空间的冲突。这就是上面引用文章建议的做法。


这并没有回答问题。一旦您拥有足够的声望,您将能够评论任何帖子;相反,提供不需要询问者澄清的答案。- 来自审核 - Uyghur Lives Matter
我正在工作,只是试图通过提供有用的信息来帮助其他处于类似情况的人解决这个确切的问题。我认为这个回答补充了已经提供的答案。如果这会引起问题,我就会把它删除。如果我是在问这个问题,我希望有人与我分享来自 LLVM 的那个声明。 - GC Saab
1
@cpburnz 我想我对于寻求帮助的方式还比较陌生,因为对我来说这是很有用的。具体而言,我这个不够清晰的答案应该添加什么?它更像是对已发布答案的另一种建议。 - GC Saab
对于那些不经常使用 Stack Overflow 的人来说,这很有用,但对于花费大量时间与这些问题交互的人来说则有些烦躁,因此老手们会强制执行这一规定。这是一个关乎清洁和秩序的问题。 - Sipty

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接