据我所知,一个全局变量在 C 中可能是一到两个不同的存储类,并且声明可以用两个不同的关键字给出,相应地
extern int foo; //default
static int bar;
静态变量只在声明模块内可见,不能导出。在外部声明的情况下,该变量位于所有链接模块的公共命名空间中,除非被静态变量遮蔽。
静态变量必须在其模块中定义,而外部变量可以在其他地方定义。如果曾经使用过,则必须对其进行定义。
我的编译器(GCC)接受
static int bar = 5;
但抱怨
extern int foo = 4;
似乎期望外部变量永远不会用关键字“extern”定义。这导致了以下问题:
上例中的 Object 'foo' 在定义它的模块中有什么样的存储类?