关于C语言中外部值的澄清

关于C语言中外部值的澄清,c,extern,C,Extern,在C语言中,外部变量获取初始值“零”。 然而,在阅读了关于这个特殊类别的内容之后,它说,将变量作为外部变量进行清除,意味着该值只通过了“清除阶段”。为什么一个变量可以在不进入初始化阶段并为特定变量分配内存的情况下获得初始值? 请考虑以下代码: extern int var; int main(void) { var = 10; return 0; } 我理解为什么会出现这样的问题:我们试图将一个值初始化为一个未在内存中分配的变量(该变量实际上不存在)。 我的观点是:为什么它的内存不存

在C语言中,外部变量获取初始值“零”。 然而,在阅读了关于这个特殊类别的内容之后,它说,将变量作为外部变量进行清除,意味着该值只通过了“清除阶段”。为什么一个变量可以在不进入初始化阶段并为特定变量分配内存的情况下获得初始值? 请考虑以下代码:

extern int var; 
int main(void) 
{ 
var = 10; 
return 0; 
}
我理解为什么会出现这样的问题:我们试图将一个值初始化为一个未在内存中分配的变量(该变量实际上不存在)。
我的观点是:为什么它的内存不存在,遵循“extern”术语,变量的初始值为“零”。在我看来,这意味着如果内存有一个初始值,它实际上是存在的。…

要使该代码有效,程序的另一部分必须包含
var
的定义,例如:

int var = 0;

这就是初始值的来源。如果不提供初始值设定项,那么它的行为就像是使用
={0}
初始化一样(这是静态存储持续时间变量的规则)。

内存确实存在,它只是在其他地方。否则会出现链接器错误。@tkausl但如果它不存在于其他地方?它是设置为“零”,它是初始值还是我得到链接器错误?该变量不是初始化为
0
,因为它是
extern
,而是因为它是一个静态变量,并且无论其他编译单元是否可用都会初始化。@WeatherVane但据我所知。。。静态变量和外部变量具有相同的初始值“零”。@user6394019
extern int var。它是另一节中定义的变量的声明。如果我试图按原样编译和链接程序,就会得到错误LNK2019:函数_main中引用的未解析外部符号_var。