为什么我们需要extern?

时间:2012-10-06 20:00:12

标签: c++ namespaces extern

this问题中,我问为什么

//foo.h
namespace foo{
    int bar;
}
当我在多个文件中包含foo.h时,

给了我链接器错误。结果我需要extern int bar;来防止错误。为什么我需要extern?我不希望在我希望在多个翻译单元中访问的每个命名空间中的每个变量之前键入extern。为什么int bar;没有达到我的预期呢?为什么C ++标准委员会坚持让我在任何地方输入extern

2 个答案:

答案 0 :(得分:10)

Extern说变量的存储声明将在别处进行。接着然后链接器在链接时查找另一个文件中的符号。没有extern,你告诉编译器,为全局分配一些空间。如果在多个文件中执行此操作,链接器将看到同一符号的多个实例。

答案 1 :(得分:3)

  

为什么C ++标准委员会坚持让我输入extern   到处?

它从未告诉到处写......

namespace foo{
extern "C++" {
    int bar;
    int car;
    int dar;
    int xar;
}

}