在C语言中,static关键字的作用如下:
- 在修饰变量的时,static修饰的静态局部变量只执行一次,而且延长了局部变量的生命周期,直到程序运行结束以后才释放。
- static修饰全局变量的时,这个全局变量只能在本文件中访问,不能在其它文件中访问,即便是extern外部声明也不可以。
- static修饰一个函数,则这个函数的只能在本文件中调用,不能被其他文件调用。Static修饰的局部变量存放在全局数据区的静态变量区。
参考这篇
将前面的命名为后面的那个
typedef unsigned char BYTE;
对结构体和指针函数也是这样使用,详见相应部分
const限定一个变量不允许被改变,产生静态作用。使用const在一定程度上可以提高程序的安全性和可靠性。
讲解
详细功能参考
下面这个代码是正点写的外部SRAM实验中这样使用的
u32 testsram[250000] __attribute__((at(0X68000000)));//测试用数组 这是一个属性定义,定义他的绝对地址是在0X68000000,也就是外部SRAM的首地址。大小是1M字节
volatile
- volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。
volatile int i=10;
int a = i;
...
// 其他代码,并未明确告诉编译器,对 i 进行过 *** 作
int b = i;
- volatile 的作用是:比如a要=i,那么就会从i的地址出取值给a。b也是。
- volatile 指出 i 是随时可能发生变化的,每次使用它的时候必须从 i的地址中读取,因而编译器生成的汇编代码会重新从i的地址读取数据放在 b 中。
- 而不加volatile ,则会进行优化做法。优化做法:由于编译器发现两次从 i读数据的代码之间的代码没有对 i 进行过 *** 作,它会自动把上次读的数据放在 b 中。而不是重新从 i 里面读。这样以来,如果 i是一个寄存器变量或者表示一个端口数据就容易出错,所以说 volatile 可以保证对特殊地址的稳定访问。
- 注意,在 VC 6 中,一般调试模式没有进行代码优化,所以这个关键字的作用看不出来。下面通过插入汇编代码,测试有无 volatile 关键字,对程序最终代码的影响,输入下面的代码:
参考,里面有个很好的例子看一下
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)