总结一下关于声明和定义的区别,以及static和extern的异同
声明和定义
1,广义角度声明包含定义,定义是声明的一个特例。
2,定义是会简历存储空间的,而声明则不会,int a;声明a的同时,也定义了a,建立了存储空间;extern b;只是声明了b,并不是定义b,表示b是在其它文件中定义的。
static和extern
static
名称 | 存储位置 | 作用范围 | 赋值 |
---|---|---|---|
全局变量 | 静态存储区 | 从定义位置到文件结束, 且能够被其它文件引用。 |
若被赋值则为赋值 若没有则为0或空 |
静态全局变量 | 静态存储区 | 从定义位置到文件结束, 且不能够被其它文件引用, 限定于定义的文件内。 |
若被赋值则为赋值 若没有则为0或空 |
局部变量 | 非静态存储区 | 从定义位置到函数执行结束。 | 若被赋值则为赋值 若没有则为随机数 |
静态局部变量 | 静态存储区 | 从定义位置到文件结束。 | 若被赋值则为赋值 若没有则为0或空 且只被赋值一次,以后再用到还是上次的值 |
静态函数 | 栈区 | 定义所在文件内。 | - |
非静态函数 | 栈区 | 可以被出定义所在文件外的 其它文件调用。 |
- |
extern
extern 只在头文件中声明
static 只在源文件中定义
* 如有疑问欢迎批评指正,谢谢! *