您的位置:首页 > 其它

0722学习记录(预处理和关键字)

2016-07-23 09:18 267 查看
register:作用是请求编译器将值尽可能保存在cpu内部寄存器中,这样将省去从内存抓取数据的时间,增快程序的运行效率。但是为什么是尽可能呢,因为寄存器的数量是有限的,我们不能将每个变量都用register来声明,一般用它来声明频繁使用的或者是循环变量,使用register要注意以下几点:1.只能修饰局部变量,不能修饰全局变量,因为全局变量会被多个任务或者说是进程所访问,但是用register声明后只有当前进程知道你这个变量所在的位置,2.不能用&符号对register声明的变量取地址,因为register声明的变量存放在寄存器中,而&是取这个变量在内存中的地址。3.register修饰的变量一定是cpu所能接收的类型。

static:static声明的变量称为静态变量,它既可以修饰变量,也可以修饰函数,当用来修饰局部变量时,它的作用就是延长局部生命周期,让程序运行完再释放。修饰全局变量使得这个变量只能在本文件被访问,其他文件不可见,声明函数使得它只能在本文件被访问。它修饰的变量保存在数据的静态数据区,若没有初始化将会默认初始化为0。写程序应该尽量少用static定义变量,全局变量比较危险,因为可能会在不同的地方被使用,改变原来的值。

const:const修饰一个变量,这个变量叫做只读变量,这个变量对应的空间是可以变化的,但不能通过修饰它的变量名来修改这个空间对应的值。例如int const num = 5; num++;这种作法就是错的,所以我们一般来用const修饰函数形参,避免修改实参的值,用const一定要初始化。

typedef:作用是给数据类型重命名,这样可以提高代码的移植性,把复杂的类型简单的声明,方便编写程序,同时,也起到了解释某些变量的作用,也就是注释作用。

最后我们来看下volatile的:就像大家更熟悉的const一样,volatile是一个类型修饰符(type specifier)。它是被设计用来修饰被不同线程访问和修改的变量。如果不加入volatile,基本上会导致这样的结果:要么无法编写多线程程序,要么编译器失去大量优化的机会。一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子:

1). 并行设备的硬件寄存器(如:状态寄存器)

2). 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)

3). 多线程应用中被几个任务共享的变量。

差不多就这么多了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: