一个全局变量可能一个在C两个不同的存储类,以我所知,并声明可以用两种不同的关键字,correspodingly给出extern声明和定义用C
extern int foo; //default
static int bar;
静态变量只在声明的模块内可见,并且不能导出。在extern声明的情况下,变量位于链接的所有模块的公共名称空间中,除非被静态变量遮蔽。
鉴于静态变量必须在其模块中定义,可以在其他地方定义一个外部变量。必须定义它是否曾经使用过。
我的编译器(GCC)接受
static int bar = 5;
但在投下
extern int foo = 4;
这似乎可以预期的extern变量从未使用关键字 '的extern' 定义的抱怨。这导致以下问题问题:
上述示例中的Object'foo'在定义它的模块中具有哪种存储类?
什么是投诉?我怀疑它抱怨它被多次定义。 – Skurmedel 2011-04-12 11:38:02
“extern”实际上是“其他人已经定义了这个” - 所以在extern声明中尝试赋值时没有任何意义。你只需做“int foo = 4;”在*一个* C文件中,你很好。 – Erik 2011-04-12 11:40:53
你不能设置extern的值,你不拥有它的实例化模块,它声明它通常是 – forsvarir 2011-04-12 11:40:57