关于全局变量(非静态)有以下写法:
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.
网友评论