在defintion和声明中指定extern关键字是否可以

时间:2016-10-05 06:48:54

标签: c++

我知道C ++中的extern关键字可以用来告诉编译器特定变量有一个外部链接(它在另一个翻译单元中定义):

// first.cpp

int foo = 0;

// second.cpp

extern int foo;

但是以下用法呢?

// first.cpp

extern int foo = 0;

// second.cpp

extern int foo;

请注意,两个文件都在定义和声明中为同一个变量指定了extern关键字。

可以吗?如果是这样,那么有什么不同呢?

2 个答案:

答案 0 :(得分:3)

extern int foo = 0;

相同
int foo = 0;

用于所有实际目的。 extern关键字是多余的,但不是错误的。

然而,

之间存在差异
extern int foo;

int foo;

第一个是声明,第二个是定义。

答案 1 :(得分:1)

请注意,extern不会通知编译器foo的定义在另一个翻译单元中。所有这一切都宣告了它的存在。

所以foo可以多次声明。但它只能初始化一次。

因此,在您的特定情况下,您的写作extern int foo = 0;等同于int foo = 0;