【问题标题】:Can a static variable be declared extern in C?静态变量可以在 C 中声明为 extern 吗?
【发布时间】:2015-07-06 11:21:17
【问题描述】:

所以,假设我有:

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?
}

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

【问题讨论】:

  • 是什么阻止你询问你的编译器?
  • 这个问题没有任何意义,extern和static是彼此的对立面。您本质上是在问“红色汽车可以在保持红色的同时变成蓝色吗?”。
  • @molbdnilo 编译器不具有权威性

标签: c


【解决方案1】:

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

i 正确。

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

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

【讨论】:

    【解决方案2】:

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

    extern int foo; 无效 -> foo 是一个局部变量,其范围在 'for' 循环中

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多