2

这个问题中,我问为什么

//foo.h
namespace foo{
    int bar;
}

foo.h当我包含在多个文件中时,给了我一个链接器错误。原来我需要extern int bar;防止错误。为什么我需要extern?我不想extern在我想在多个翻译单元中访问的每个命名空间中的每个变量之前键入。为什么不int bar;按我的预期做?为什么 C++ 标准委员会坚持让我extern到处打字?

4

2 回答 2

10

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

于 2012-10-06T20:02:16.473 回答
3

为什么 C++ 标准委员会坚持让我在任何地方都输入 extern?

它从来没有告诉过到处写....

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

}
于 2012-10-06T20:10:24.960 回答