C语言——部分关键字(保留字)

extern(外部)

介绍


extern存储类用于定义在其他文件中声明的全局变量或函数。当使用 extern 关键字时,不会为变量分配任何存储空间,而只是指示编译器该变量在其他文件中定义。


实例1(声明变量)


变量a在文件514中已经定义,使用extern在文件114中声明,指示编译器该变量在其他文件中定义。

全局变量具有外部链接属性。相当于使用extern链接的手段将全局变量a在文件114中声明。

在下面的static修饰全局变量还会提到


实例2(声明函数)


函数也具有外部链接属性。相当于使用extern链接的手段将函数Add在文件114中声明。

在下面的static修饰函数还会提到


define(定义)

介绍


define用于为各种数据类型定义别名


实例1(定义常量)


形式:

#define 常量名 常量值


实例2(定义类型名)


形式:

#define 新类型名 原类型名


实例3(定义关键字)


形式:

#define 新名 原名


实例4(定义宏)


形式:

#define 宏名(参数) 宏体

参数是无类型的


实例5(定义语句)


形式:

#define 名字 语句


拓展


如果define定义的语句过长(需要好几行),就可以用\(续行符)续行。


typedef(类型定义)

介绍


类型定义(类型重命名)

将类型重定义


实例


形式:

typedef 原类型名 新类型名


static(静态的)

介绍


static是用来修饰变量和函数的

修饰局部变量——称为静态局部变量(改变了变量的存储位置和作用周期)

修饰全局变量——称为静态全局变量(改变了变量的作用域)

修饰函数——称为静态函数(改变了函数的作用域)


实例1(修饰局部变量)


未被static修饰

被static修饰

static修饰的局部变量使编译器在程序的生命周期内保持局部变量的存在,而不需要在每次它进入和退出作用域时进行创建和销毁,因此,使用static修饰局部变量可以在函数调用之间保持局部变量的值。静态变量在程序中只被初始化一次。

本质上,static修饰局部变量时,局部变量变成了静态局部变量,改变了变量的存储位置,在静态区开辟了一个新的内存区,然后把a存进了新的内存区

放在静态区的的数据出了作用域不会被销毁,在程序结束时才会销毁


实例2(修饰全局变量)


把全局变量a用static修饰之后,再用extern引用就会报错,这是怎么回事呢?

原来是全局变量具有外部连接属性,而被static修饰的全局变量就只有了内部链接属性,其他源文件就不能用这个全局变量。

当static修饰全局变量时,会使变量的作用域限制在声明它的文件内。

全局变量本身是可以在整个工程中使用的,但被static修饰之后,就只能在当前文件使用了,相当域作用于变小了。(本质是外部连接属性变成了内部链接属性)

限制全局变量的作用域的原因(作用)有:

1、全局变量的作用域太大,标识符可能与其他变量冲突;

2、变量在任何地方都可以使用和更改,变量的安全性得不到保障。


实例3(修饰函数)


把函数Add用static修饰之后,再用extern引用就会报错,原因与全局变量被static修饰一样。

函数具有外部连接属性,而被static修饰的函数就只有了内部链接属性,其他源文件就不能用这个函数。

当static修饰函数时,会使函数的作用域限制在声明它的文件内。

函数本身是可以在整个工程中使用的,但被static修饰之后,就只能在当前文件使用了,相当域作用于变小了。(本质是外部连接属性变成了内部链接属性)


register(寄存器)

介绍


register存储类用于定义存储在寄存器中的变量,这意味着变量的最大尺寸等于寄存器的大小,且不能对它应用一元的 '&'(取地址) 运算符(因为它没有内存位置),因为它不是存储在 RAM 中的。

因为变量定义存储在寄存器中,所以变量的访问速度更快,但是它不能直接取地址,因为它不是存储在 RAM 中的。

作用:在需要频繁访问的变量上使用 register 存储类可以提高程序的运行速度。


实例


register关键字并不是百分之百有效的,它只是建议把变量存储在寄存器内,能不能存储在寄存器内是由编译器决定的。

现在的编译器很智能,如果你电脑的寄存器空闲,即使你不把一个变量设成寄存器变量,它也会把变量放在寄存器内,来提升变量访问速度,提升读写效率。


如有错误,感谢指正。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值