C ++编译器进行外部初始化时出错

时间:2018-06-26 03:44:43

标签: c++ extern

我写了以下代码

#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.

这是什么意思?我需要为此担心吗?我该如何避免呢?非常感谢〜

1 个答案:

答案 0 :(得分:5)

One explanation外部:

  

extern关键字告诉编译器在另一个源模块(当前作用域之外)中声明了一个变量。然后,链接器找到此实际声明,并设置extern变量以指向正确的位置。由extern语句描述的变量将不会分配任何空间,因为应该在其他地方正确定义它们。如果将变量声明为extern,并且链接器未找到该变量的实际声明,则它将引发“无法解析的外部符号”错误。

由于已在其他地方声明,因此在其他地方可以对其进行初始化。

简而言之,如果您在单文件程序中声明它,那就足够了;删除外部短语。