可以在C中将静态变量声明为extern吗?

时间:2015-07-06 11:21:17

标签: c

所以,让我们说,我有:

file1.c

int i;
static int j;
int main ()
{
    for ( int k = 0; k < 10; k++ )
    {
       int foo = k;
    }
}

file2.c

{
// the following statements are before main.
extern int i; // this is acceptable, I know since i acts as a global variable in the other file
extern int j; // Will this be valid? 
extern int foo; // Will this be valid as well?
}

因此,我怀疑带有问号的陈述是否有效?

2 个答案:

答案 0 :(得分:6)

没有! static全局变量具有文件范围(内部链接),因此您不能使用它们,因为它们具有外部链接...这并不意味着您不能使用具有外部链接的同名变量但它不能那个static

更正i

j不正确,至少不能是file1.c中定义的那个。

foo不正确,至少对于file2.c中没有外部链接(根本没有链接)的局部变量。局部变量仅在声明它的块被激活时才存在,因此在外部访问它是无意义的。

答案 1 :(得分:0)

extern int j; 无效 - &gt;静态变量在文件范围内

extern int foo; 无效 - &gt; foo是一个局部变量,其范围在&#39; for&#39;循环