extern

作者: shelldon1024 | 来源:发表于2020-02-13 15:48 被阅读0次

    关于全局变量(非静态)有以下写法:
    1、extern int data; //全局变量声明,不分配内存空间,可声明多次
    2、int data = 0; //全局变量声明、定义并初始化为 0,默认是 extern int data;
    3、int data; //全局变量定义,默认是 extern int data; ,编译时直到有访问该变量时才分配内存空间,初始值不确定
    对于第3点,可以写出这种诡异的代码:

    #include <stdio.h>
    
    int data;
    int data;
    int data;
    
    int main(void)
    {
        printf("%d\n", data);
        return 0;
    }
    
    

    之所以多次定义 data 还可以编译链接成功,是因为 int data; 这种定义全局变量的写法并不分配内存空间,直到运行到 printf 那一行时对 data 进行访问才分配了内存空间。将3 * int data; 换成 3 * extern int data;编译失败,可见int data; != extern int data;

    得到结论:
    全局变量(非静态)可以定义多次🐶。

    更新:
    在 stackoverflow 上找到了相关问题的解答 In C,why is multiple declarations working fine for a global variable but not for a local variable?

    In C and C++, int y; within a function is both a declaration and a definition.

    In C, int x; in the file scope (outside any function) is a declaration and a tentative defintion. Multiple tentative definitions are allowed; only one definition is allowed.

    相关文章

      网友评论

          本文标题:extern

          本文链接:https://www.haomeiwen.com/subject/qppkfhtx.html