外部变量和全局变量之间的区别?

时间:2014-02-03 13:51:51

标签: c extern

    #include <stdio.h>

    int i;

    int main()

    {

        extern int i;

        if (i == 0)

            printf("scope rules\n");

    }

输出: 范围规则

extern变量如何在这里工作?

为什么没有像这样的错误 Compile time error due to multiple declaration

2 个答案:

答案 0 :(得分:8)

extern 实际上并不创建变量。它就像一个类的前向声明,或函数的原型。开头的变量“i”会创建一个名为“i”的全局整数,它将存在于当前编译单元中,而“i”“int main”是一个声明,在某些编译单元中存在一个名为“i”的整数,并且名称“i”的任何使用参考该变量。

答案 1 :(得分:4)

因为您可以声明某些内容存在于您想要的次数(假设每次都是相同的类型),但您只能定义一次。

extern int ii存在的声明,是int

其中存在于文件级别(标题后的int i),具有静态存储持续时间。这意味着它已初始化为零,因此您将始终看到输出"scope rules"

这是一个微妙的概念,声明/定义的区别,但它是每个C程序员最终应该学习的一个。