c 关键字

c 关键字,第1张

static

在C语言中,static关键字的作用如下:

  • 在修饰变量的时,static修饰的静态局部变量只执行一次,而且延长了局部变量的生命周期,直到程序运行结束以后才释放。
  • static修饰全局变量的时,这个全局变量只能在本文件中访问,不能在其它文件中访问,即便是extern外部声明也不可以。
  • static修饰一个函数,则这个函数的只能在本文件中调用,不能被其他文件调用。Static修饰的局部变量存放在全局数据区的静态变量区。
typedef

参考这篇
将前面的命名为后面的那个

typedef unsigned char BYTE;

对结构体和指针函数也是这样使用,详见相应部分

const

限定一个变量不允许被改变,产生静态作用。使用const在一定程度上可以提高程序的安全性和可靠性。
讲解

attribute

详细功能参考

下面这个代码是正点写的外部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 关键字,对程序最终代码的影响,输入下面的代码:

参考,里面有个很好的例子看一下

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/3002612.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-09-27
下一篇 2022-09-27

发表评论

登录后才能评论

评论列表(0条)

保存