我知道C ++中的extern
关键字可以用来告诉编译器特定变量有一个外部链接(它在另一个翻译单元中定义):
// first.cpp
int foo = 0;
// second.cpp
extern int foo;
但是以下用法呢?
// first.cpp
extern int foo = 0;
// second.cpp
extern int foo;
请注意,两个文件都在定义和声明中为同一个变量指定了extern
关键字。
可以吗?如果是这样,那么有什么不同呢?
答案 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;