static \ const \ volatile 的含义

1.static

在函数体内,一个被声明为静态的变量在这一函数被调用的过程中维持其值不变

在模块内(函数体外),一个被声明为静态的变量可以被模块内的所有函数访问,但不能被模块外的其他函数访问,即它是一个本地的全局变量

在模块内,一个被声明为静态的啊函数只可以被这一模块内的其他函数调用,这个函数被限制在声明他的模块的本地范围内使用

2.const(搜索Dan Saks总结的const)

const意味着“只读”

//声明指针在C/C++中是从右往左读
const int a;//常整型数
int const a;//常整型数
const int *a;//指向常整型数的指针(整数不能修改)
int *const a;//指向整型数的常指针(指针不能修改)
int const * a const;//指向常整型数的常指针(整型数 指针均不能修改)

3.volatile

被定义为volatile的变量可能会被意想不到的改变,这样编译器就不会假设这个变量的值。优化器在用到这个变量的时候必须每次都小心的重新读取这个变量的值,而不是使用在寄存器中的备份

使用volatile的例子:

并行设备的硬件寄存器

一个中断服务子程序中会访问到的非自动变量

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

一个参数可以是const还可以是volatile,例如,只读的状态寄存器,volatile因为他可能被意想不到的改变,const因为程序不应该试图去修改它。

一个指针可以是volatile,例如,当一个中断服务子程序修改一个指向一个buffer的指针时。

时间: 2024-08-09 22:52:54

static \ const \ volatile 的含义的相关文章

c中常用的关键字static const volatile

在C语言中,关键字static有三个明显的作用:1). 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变.2). 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问.它是一个本地的全局变量.3). 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用.那就是,这个函数被限制在声明它的模块的本地范围内使用.大多数应试者能正确回答第一部分,一部分能正确回答第二部分,同是很少的人能懂得第三部分.这是一个应试者的严重的缺点,因

C语言中auto,register,static,const,volatile的区别

1)auto 这个关键字用于声明变量的生存期为自动,即将不在任何类.结构.枚举.联合和函数中定义的变量视为全局变量,而在函数中定义的变量视为局部变量.这个关键字不怎么多写,因为所有的变量默认就是auto的. (2)register 这个关键字命令编译器尽可能的将变量存在CPU内部寄存器中而不是通过内存寻址访问以提高效率. (3)static 常见的两种用途: 1>统计函数被调用的次数; 2>减少局部数组建立和赋值的开销.变量的建立和赋值是需要一定的处理器开销的,特别是数组等含有较多元素的存储类

详解关键字static,const,volatile

static static修饰局部变量 static修饰局部变量用于修改变量的存储位置,从自动变量修改为静态变量(在静态区开辟空间,不在栈上开辟),但变量的链接属性和作用域不受影响.static修饰局部变量时该变量在程序执行之前创建,并在程序的整个执行空间一直存在,即使出了作用域也只是被隐藏并不销毁该变量.请看下面的两段代码 代码一:没有static修饰的局部变量 int main() { int i=0; for(i=0;i<10;i++) { int j=10; j+=1; printf(&qu

c语言修饰符总结const、static、volatile、auto、extern、register

写在前面 今天下午一个同事问「register」关键字是什么作用?噢,你说的是「register」啊,它的作用是--脑袋突然断片儿,我擦,啥意思来着,这么熟悉的陌生感.做C语言开发时间也不短了,不过好像没有用到过「register」,但作用还是知道的,一下子想不起来了,一万个草泥马飞奔过来. 其实C语言中除了register外,还包含常见的const.static.volatile.auto.extern等修饰符,现在一起再总结一下好了. register 修饰符 register,寄存器变量,

C语言中关键字volatile的含义【转】

本文转载自:http://m.jb51.net/article/37489.htm 本篇文章是对C语言中关键字volatile的含义进行了详细的分析介绍,需要的朋友参考下 volatile 的意思是“易失的,易改变的”.这个限定词的含义是向编译器指明变量的内容可能会由于其他程序的修改而变化.通常在程序中申明了一个变量时,编译器会尽量把它存放在通用寄存器中,例如ebx.当CPU把其值放到ebx中后就不会再关心对应内存中的值.若此时其他程序(例如内核程序或一个中断)修改了内存中它的值,ebx中的值并

C++ Primer 学习笔记_25_类与数据抽象(11)--const 用法小结、static与const以及static const(const static)

一.const 用法总结 1.可以对const 的用法做个小总结: const int n = 100;  //定义常量 const Test t(10); const int & ref = n;   //const引用 int& ref = n;  //Error [const与指针] const int* p; //const出现在*前面,表示*p是常量 (*p = 200; //Error) int * const p2;  //const出现在*后面,表示p2是常量 (p2 =

static inline volatile的作用

1.static (1)先来介绍它的第一条也是最重要的一条:隐藏. 当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性.为理解这句话,我举例来说明.我们要同时编译两个源文件,一个是a.c,另一个是main.c. 下面是a.c的内容 [cpp] view plaincopy char a = 'A'; // global variable void msg() { printf("Hello/n"); } 下面是main.c的内容 [cpp] view p

iOS#define和static const

定义常量最好用 static const ,不用#define 编写代码时经常要定义常量.例如,要写一个UI视图类,此视图显示出来之后就播放动画,然后消失.你可能想把播放动画的时间提取为常量.掌握了Objective-C与其C语言基础的人,也许会用这种方法来做: #define ANIMATION_DURATION 0.3 上述预处理指令会把源代码中的ANIMATION_DURATION字符串替换为0.3.这可能就是你想要的效果,不过这样定义出来的常量没有类型信息."持续"(durat

C++中类const、static、static const成员变量

#include<iostream> using namespace std; class Test { private: const int a;  //const 成员变量只能在构造函数的成员初始化列表中初始化,不能在函数体中和其他地方 static int b; //static 成员变量需要在全局范围内初始化,格式: 类型名 类名::变量名 = 值 static const int c;//static const 成员变量需要在全局范围内初始化,格式:类型名 类名::变量名 = 值