2

据我所知,在 C++ 中,可以多次声明同一个名称,只要它在所有这些声明中具有相同的类型。要声明类型的对象int,但不定义它,使用extern关键字。所以以下应该是正确的并且编译没有错误:

extern int x;
extern int x; // OK, still declares the same object with the same type.
int x = 5;    // Definition (with initialization) and declaration in the same
              // time, because every definition is also a declaration.

但是一旦我将它移到函数内部,编译器(GCC 4.3.4)就会抱怨我正在重新声明x它是非法的。错误消息如下:

test.cc:9: error: declaration of 'int x'
test.cc:8: error: conflicts with previous declaration 'int x'

其中int x = 5;在第 9 行,extern int x在第 8 行。

我的问题是:
如果多个声明不应该是错误,那么在这种特殊情况下为什么会出现错误?

4

1 回答 1

7

一个extern声明声明了一些具有外部链接的东西(这意味着定义应该出现在某个编译单元的文件范围内,可能是当前的)。局部变量不能有外部链接,所以编译器会抱怨你试图做一些矛盾的事情。

于 2011-03-03T20:00:12.073 回答