我写了以下代码
#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.
这是什么意思?我需要为此担心吗?我该如何避免呢?非常感谢〜
答案 0 :(得分:5)
extern关键字告诉编译器在另一个源模块(当前作用域之外)中声明了一个变量。然后,链接器找到此实际声明,并设置extern变量以指向正确的位置。由extern语句描述的变量将不会分配任何空间,因为应该在其他地方正确定义它们。如果将变量声明为extern,并且链接器未找到该变量的实际声明,则它将引发“无法解析的外部符号”错误。
由于已在其他地方声明,因此在其他地方可以对其进行初始化。
简而言之,如果您在单文件程序中声明它,那就足够了;删除外部短语。