static auto extern register

总述

内存的用户区可以分为三部分,程序区、静态存储区和动态存储区。
静态内为三种:静态局部变量,静态外部变量,外部变量(全局变量)。
动态分为三种:自动局部变量,寄存器变量,形式参数。


函数形参

形参可以定义为自动变量或寄存器变量。


auto

局部变量默认是auto,占据动态存储区,函数调用时动态分配存储空间,调用后释放。调用一次执行一次赋初值语句,若不赋初值会是一个不确定的初值。

与之相对应的是全局变量和静态局部变量,这两种存储在静态存储区,编译时进行初始化(赋初值)且只执行这一次赋初值语句,若无赋初值语句,则系统为其赋值(0或空指针)。故其在程序运行时已经有初值,在程序运行一开始就在静态存储区内分配到固定空间,整个程序运行期间不释放。


register

用register来定义寄存器变量,一般变量都存放在内存内,但寄存器变量直接存放在CPU寄存器里面,不用再去内存存取,提高了执行效率。
只有局部自动变量和形式参数可以作为寄存器变量,局部静态变量不能定义为寄存器变量。也就是只有放在动态存储区的才有资格被定义成寄存器变量。


static

1. static定义局部变量

static定义局部变量,成为静态局部变量,仅在编译时执行一次赋初值语句。如果无赋初值,则编译时自动赋初值0或空字符。以后每次调用后用上次执行后保留的值,不再重新赋初值。

虽然静态局部变量在函数调用后仍然存在,但是其他函数不能引用它,因为它是局部变量。

2. static定义外部变量

static定义外部变量,使外部变量只能被本文件引用,不能被其他文件引用。

3. static定义内部函数

用static来定义内部函数,因为函数默认是全局的,而加static后使之只能被本文件使用,成为内部函数。


extern

1. extern定义或者声明外部函数

由于函数本质上是外部的、全局的,所以无论是定义外部函数或者想使用外部函数(即使是不同源文件)时做的声明(函数原型),都可以省略extern。 

只要在使用外部函数(即使不同文件)的每一个文件中都声明该函数,即写出该函数的函数原型(可以在文件开头,也可以在函数内,也就是使用该函数前任何位置),函数原型会通知编译系统,该外部函数会在稍后定义,或在另一文件定义。

当已经使用了文件包含(包含定义该函数的)的预处理后,无需声明即可使用了。

2. extern声明外部变量

首先外部变量即全局变量,
extern声明(任何位置声明都可)一个已经定义过的外部变量(本文件内定义或其它文件定义都可),用来将该外部变量的作用域扩展至声明处。编译时遇到此声明,会先在本文件找是否有对应外部变量的定义,如果没有,就在连接时从其它文件找,并将其作用域扩展到本文件extern声明处。
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值