我写了以下代码
#include<iostream>
using namespace std;
extern int var = 0;
int main(void)
{
var = 10;
return 0;
}
我用了
g++ -std=c++11 test.cpp -o test
和
g++ test.cpp -o test
以编译代码。我收到了以下警告
test.cpp:44:12: warning: 'extern' variable has an initializer [-Wextern-initializer]
extern int var = 0;
^
1 warning generated.
这是什么意思?我需要担心这个吗?我怎样才能避免它?多谢~
外部的一种解释:
extern 关键字告诉编译器变量是在另一个源模块(当前范围之外(中声明的。然后,链接器找到此实际声明,并将 extern 变量设置为指向正确的位置。extern 语句描述的变量不会为它们分配任何空间,因为它们应该在其他地方正确定义。如果变量被声明为 extern,并且链接器找不到它的实际声明,它将引发"未解析的外部符号"错误。
由于它是在其他地方声明的,所以其他地方是初始化它的地方。
更简单地说,如果你在单文件程序中声明它,这就足够了;删除外部短语。