Why won't extern link to a static variable?
当声明n(在另一个文件中)
基本上,为什么文件范围中的
请记住,有四种类型的文件范围变量定义:
对于听众中的纯粹主义者:"文件"=编译单元。
注意,静态内部函数(不在文件范围内)的作用域更为紧密:如果两个函数即使在同一个文件中声明
(*):对于不熟悉的人:在通常的模式中,一个编译单元必须定义一个全局变量,而其他的则可以引用它。它"活"在那个编译单元中。在上述情况(3)中,没有文件(或所有文件)定义它。如果有两个文件称为
在标准C中,函数外部声明的变量有两个作用域。
当然,在实践中,这些天还有其他的可见性。特别是,现在在单个源文件和整个程序之间存在范围级别;单个共享库的级别是有用的(可以通过类似gcc函数属性的机制设置)。但这只是非静态变量主题的一个变化;
IV.C:2:1:错误:声明说明符中有多个存储类外部静态I;^
这就是我们试图消除静态变量时得到的结果。声明extern static int i;—类似于声明float int i;不能让float和in t出现在同一声明中,对吗?同样,在同一声明中不能有extern和static。
根据MSDN文档:
When modifying a variable, the static keyword specifies that the variable has static duration (it is allocated when the program begins and deallocated when the program ends) and initializes it to 0 unless another value is specified. When modifying a variable or function at file scope, the static keyword specifies that the variable or function has internal linkage (its name is not visible from outside the file in which it is declared).
http://msdn.microsoft.com/en-us/library/s1sb61xd(v=vs.80).aspx:2013年6月