static和extern,定义和声明

总结一下关于声明和定义的区别,以及static和extern的异同

声明和定义

1,广义角度声明包含定义,定义是声明的一个特例。
2,定义是会简历存储空间的,而声明则不会,int a;声明a的同时,也定义了a,建立了存储空间;extern b;只是声明了b,并不是定义b,表示b是在其它文件中定义的。

static和extern
static

名称 存储位置 作用范围 赋值
全局变量 静态存储区 从定义位置到文件结束,
且能够被其它文件引用。
若被赋值则为赋值
若没有则为0或空
静态全局变量 静态存储区 从定义位置到文件结束,
且不能够被其它文件引用,
限定于定义的文件内。
若被赋值则为赋值
若没有则为0或空
局部变量 非静态存储区 从定义位置到函数执行结束。 若被赋值则为赋值
若没有则为随机数
静态局部变量 静态存储区 从定义位置到文件结束。 若被赋值则为赋值
若没有则为0或空
且只被赋值一次,以后再用到还是上次的值
静态函数 栈区 定义所在文件内。 -
非静态函数 栈区 可以被出定义所在文件外的
其它文件调用。
-

extern
extern 只在头文件中声明
static 只在源文件中定义


* 如有疑问欢迎批评指正,谢谢! *