C规则中的extern关键字

时间:2018-08-09 07:28:27

标签: c extern

下面的代码为什么起作用-

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

但是这不是-

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

3 个答案:

答案 0 :(得分:4)

正如评论中已经提到的,在第一个片段中有两个不同的变量;范围规则使局部(内部)变量隐藏外部变量,但仍然有两个变量。

在第二个片段中,有两次声明相同标识符的诱惑,并且声明彼此冲突。

答案 1 :(得分:1)

因为extern表示该变量在其他位置定义。您可以在其他地方从全局范围定义变量(好吧,因为它是全局的,所以它是共享的:)),但是您不能在其他地方定义局部变量,因为函数体就在这里。如果您能以某种方式在两个文件之间将函数主体拆分为两个,则在一个块中声明此变量,然后使用extern在另一个块中引用该变量,这将很有意义。但是,这是不可能的,因此函数体内的extern是没有意义的。

UPD :抱歉,这两种情况都没有两个变量。在这种情况下,@ linuxfan的答案会更好。我将在此处保留此答案,以防万一对其他人有帮助(作为其他详细信息)。

答案 2 :(得分:1)

在您的第一个片段中。您声明的是全局变量'i'存在,并且已在项目中其他位置的某些文件中的其他位置声明。

主文件中的其他函数将能够访问该变量。主文件中的main函数会创建一个具有相同名称的局部变量,因此将无法访问全局'i'变量。

第二个片段有两个错误。 1)您正在尝试声明局部extern变量-这是无效的。 2)您尝试声明具有相同名称的相同作用域中的变量。

相关问题