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

Pan*_*ato 2 c extern

    #include <stdio.h>

    int i;

    int main()

    {

        extern int i;

        if (i == 0)

            printf("scope rules\n");

    }
Run Code Online (Sandbox Code Playgroud)

输出:范围规则

extern变量如何在这里起作用?

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

Shu*_*rol 8

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


pax*_*blo 5

因为您可以根据需要多次声明某事物存在(假设每次的类型都相同),但您只能定义一次。

extern int i是一个i存在的声明,并且是一个int.

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

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