C语言 auto,static,extern,register类型的区别

auto自动变量:

一般情况下,C语言默认所定义的变量都是自动变量。
int a;编译器会自动解析为:auto int a;
不仅仅变量,还包括数组,结构体,指针,共用体。


register寄存器变量:

寄存器在cpu内部,运算速度非常快,内存的数据必须载入寄存器才能运算,所以频繁使用的变量放在寄存器可以提高效率。
寄存器说明符只能用于函数中的变量和函数中的形参,全局变量与静态变量不能使用。
另外在C语言中不能取寄存器变量的地址,C++可以,因为寄存器变量在内存中有副本。


extern全局变量:

一个在函数外部定义的变量,例如int a =10; , 会被编译器自动解析称extern int a=10;
全局变量不仅可以被程序内的函数引用,也可以被其他源文件所引用。
全局变量在定义的时候就必须赋值。因为赋值的时候会通知编译器在静态内存空间开辟一块类型大小相同的内存区域用于存储该变量,才会构造该变量。


static静态变量:

静态变量分为 : 静态全局变量与静态局部变量。
静态局部变量: 始终在内存,一旦定义初始化,即使再执行初始化也只初始化一次,生命周期与程序共存亡。
静态全局变量:不能被其他源文件引用,作用域限制在本文件。


静态函数:

在函数名前加上static,用于限定函数的作用范围,让该函数只能由本文件调用。


extern外部函数:

在软件工程规范里面,一般如果要调用外部函数都需要声明,并且在程序名前加上extern。
例如:

extern void msg();

但也可以不写,编译器会自动加上extern,但在软件工程开发中会用到。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值