C语言——const、static、volatile、inline的用法及含义
来源:互联网 发布:如何带端口ping 编辑:程序博客网 时间:2024/06/05 16:22
static关键字
1)在函数体内,一个被声明为静态的变量在这一函数被调用过程中维持其值不变(该变量存放在静态变量区)。
2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。注意,只有在定义了变量后才能使用。如果变量定义在使用之后,要用extern 声明。所以,一般全部变量都会在文件的最开始处定义。
3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用,相当于这个函数在别的模块里是不可见的
4)一个被声明的静态变量如果没有被初始化,那么他会被自动初始化(默认)为0,不想被释放的时候,可以使用static修饰。比如修饰函数中存放在栈空间的数组。如果不想让这个数组在函数调用结束释放可以使用static修饰 .
static关键字至少有下列作用:
(1)设置变量的存储域,函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值;
(2)限制变量的作用域,在模块内的static全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问;
(3)限制函数的作用域,在模块内的static函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明它的模块内;
在C++中:
const关键字:const简单来说可以概括为“readonly”
const char *pc2; //到const char的指针(后两个声明是等同的)
常量指针和指针常量:
const char * GetString(void);
如下语句将出现编译错误:
char *str = GetString();
正确的用法是
const char *str = GetString();
const跟宏定义的区别:const修饰的数据常量是有数据类型的,而用宏定义的数据常量是没有数据类型的,编译器可以对前者进行类型安全检查,而对后者只进行字符替换,没有类型安全检查,并且在字符替换时可能会产生意料不到的错误。
在C++中:
(1)、修饰类成员变量
用const修饰的类成员变量,只能在类的构造函数初始化列表中赋值,不能在类构造函数体内赋值。
volatile关键字:
1、中断服务程序中修改的供其它程序检测的变量需要加volatile;
2、多任务环境下各任务间共享的标志应该加volatile;
3、存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能由不同意义;
另外,以上这几种情况经常还要同时考虑数据的完整性(相互关联的几个标志读了一半被打断了重写),在1中可以通过关中断来实现,2中可以禁止任务调度,3中则只能依靠硬件的良好设计了。
inline关键字:
yo! peace!
- C语言——const、static、volatile、inline的用法及含义
- 嵌入式系统C语言重点语法(1)——const、volatile、static、堆栈等的意义及用法
- C语言中关键字const、static、volatile的用法分析
- C语言关键字:static,const,inline,volatile与assert()等
- [经验] C语言关键字中static,volatile,const,extern,return含义及作用?
- 杂货边角(4):C语言static, inline, volatile, const等关键字解析
- C语言关键字static和volatile 的含义和作用
- C语言中auto,register,static,const,volatile的区别
- C语言中auto,register,static,const,volatile的区别
- C语言中auto,register,static,const,volatile的区别
- C语言中auto,register,static,const,volatile的区别
- C语言中auto,register,static,const,volatile的区别
- C语言中auto,register,static,const,volatile的区别
- C语言中auto,register,static,const,volatile的区别
- C语言中auto,register,static,const,volatile的区别
- C语言中auto,register,static,const,volatile的区别
- C语言中const,extern,static,volatile的使用
- C语言中auto,register,static,const,volatile的区别
- FCC学习笔记-(三) JQuery
- Android 双开沙箱 VirtualApp 源码分析(一)
- Java synchronized的使用
- priority_queue<int,vector<int>,greater<int>>优先队列 按照由小到大顺序
- 数据库设计规则
- C语言——const、static、volatile、inline的用法及含义
- 取指定数值段的数字表
- gsoap搭建WebService服务
- 多线程下的单例
- C++ 获取文件夹下所有的文件
- 怎样快速分析一个网站的SEO优化情况?
- 云盾内容安全计费策略调整通知(附资费详情图)
- 关于使用TreeMap按照value进行排序的解决方案
- 关于ObjectAnimator不响应onAnimationStart()方法