C语言中的extern关键字规则

11 浏览
0 Comments

C语言中的extern关键字规则

这个问题已经在这里有了答案:

如何使用extern在源文件之间共享变量?

局部和寄存器变量可以声明为extern吗?

为什么下面的代码工作 -

extern int i;    
main()
{
   int i = 10;
   printf("%d", i);
}

但这个不工作 -

main()
{
   extern int i;
   int i = 10;
   printf("%d", i);
}

admin 更改状态以发布 2023年5月24日
0
0 Comments

因为 extern 表示变量在其他地方已经定义。你可以在其他地方从全局作用域定义一个变量(因为它是全局的,所以它是共享的 🙂 ),但你不能在其他地方定义一个局部变量,因为函数体就在这里。如果你能在两个文件之间以某种方式将函数体分成两部分,在其中一个块中声明这个变量,然后在另一个块中使用 extern 引用它,那就有些意义了......但这是不可能的,所以函数体内的 extern 是无意义的。

更新:我没有注意到在两种情况下都有两个变量,很抱歉。@linuxfan的答案在这种情况下更适用。我将保留这个答案,以防对任何人有帮助(作为额外的细节说明)。

0
0 Comments

正如评论中已经说明的那样,在第一个片段中有两个不同的变量;作用域规则使得局部(内部)变量隐藏了外部变量,但仍然存在两个变量。

在第二个片段中,试图声明相同的标识符两次,而这些声明相互冲突。

0