1.volatile: 告诉编译器i是随时可能发生变化的,每次使用它的时候必须从i的地址(内存)中读取,而不会使用寄存器中的缓存值;
volatile int i=10;
2.register: 使用修饰符register声明的变量属于寄存器存储类型。该类型与自动存储类型相似,具有自动存储时期、代码块作用域和内连接。声明为register仅仅是一个请求,因此该变量仍然可能是普通的自动变量。无论哪种情况,用register修饰的变量都无法获取地址。如果没有被初始化,它的值是未定的。
3.restrict:关键字restrict只用于限定指针;该关键字用于告知编译器,所有修改该指针所指向内容的操作全部都是基于(base on)该指针的,即不存在其它进行修改操作的途径;这样的后果是帮助编译器进行更好的代码优化,生成更有效率的汇编代码。
int *restrict x; //只会通过指针 x,对 x 中的值进行修改
参考:http://blog.csdn.net/lovekatherine/article/details/1891806
4.__attribute__
:可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)。
extern void myexit() __attribute__((noreturn));//表示函数不存在返回值;编译不会再出现警告信息。
参考:http://blog.csdn.net/ruixj/article/details/4274721
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-08-05 00:47:56