2016-11-22 57 views
0

代码编译没有错误,我想知道什么是不同的声明外部函数内部和外部命名空间?调用外部函数而不指定命名空间

--a.h--

namespace mynamespace { 
    extern void foo(); 
} 

--a.c--

namespace mynamespace { 
    void foo(){ 
     dosomething; 
    }; 
} 

有没有我应该担心没有 指定命名空间调用foo()时,任何关注?

#include "a.h" 
int main(int argc char *argv) 
    foo() 
} 

代替

#include "a.h" 
int main(int argc char *argv) 
    mynamespace::foo(); 
} 
+3

*“在没有指定命名空间的情况下调用foo()时,我是否应该担心?”*尝试一下,你会发现很快。编译器会告诉你它对你的代码的看法。 –

+0

@IgorTandetnik奇怪的是,我的编译器没有显示任何警告或错误,我在debain上使用gcc-4.9。 –

+0

如图所示,包含'main'的翻译单元[无法编译](http://rextester.com/UQO84160)。如果是这样,那么你要么在全局命名空间中提供'foo'的声明,要么在你的代码中没有显示的地方使用'namespace mynamespace'或'using mynamespace :: foo'。 –

回答

0

事实证明,using namespace mynamespace;在其他头文件中已经声明。所以如果一个文件包含已经定义了using namespace mynamespace;的头文件,那么当前的头文件也会受到影响。

相关问题