C语言之extern、const、volatile
2024-10-20 13:39:43
extern:
extern修饰变量,声明该变量为外部文件的全局变量。若使用外部全局变量,必须用extern声明。
extern修饰函数,声明该函数为外部函数。extern修饰的函数形参必须与原函数一致,否则可能导致传参出错,且编译器不会报警。建议声明外部函数省略掉extern。
const:
定义常量,即用const声明的变量值不能被修改。
const char* p, char const* p, char* const p的区别:
C语言中const不能修饰*,因此const char* p与char const* p等价,均表示定义一个指向字符常量的指针,即*p为常量,*p不能被修改。
而char* const p表示定义一个指向字符的常量指针,即p为常量,不能被修改,*p可以改变。
volatile:
volatile修饰的变量表示可以被某些编译器未知的因素更改,比如操作系统、硬件或者其他线程等,遇到volatile声明的变量,编译器对访问该变量的代码不再进行优化,从而可以提供对特殊地址的稳定访问。
例如:int i=1;if(i>0)...else... 编译器会认为在if判断前i赋值为1,i>0恒成立,因此编译器会优化掉else的语句以节省空间。
volatile int i=1;if(i>0)...else... volatile告知编译器变量i可能被未知因素更改,i>0不一定成立,因此编译器会完整编译。
最新文章
- C# 用SoapUI调试WCF服务接口(WCF中包含用户名密码的验证)
- 3、Redis 基础
- 准备.Net转前端开发-WPF界面框架那些事,搭建基础框架
- 使用Python给要素添加序号
- cocos2d-x之利用富文本控件遍历xml
- Windows Server 2012学习文档
- 关于null == 0?返回false的问题
- (4)java方法区
- 【Linux操作系统分析】设备驱动处理流程
- 关于对象存入NSUserDefaults
- python基础——抽象类
- ansible playbook批量改ssh配置文件,远程用户Permission denied
- Openstack部署踩坑
- 429. N叉树的层序遍历
- JavaScript学习历程和心得体验
- SVG.js Mask覆盖和ClipPath裁剪
- iOS 10 之 网络权限带来的坑
- 7.Python使用pandans遇到的坑
- go内建容器-切片
- hibernate自动生成时报错问题
热门文章
- E. XOR and Favorite Number (莫队板子题)
- D. Pair Of Lines( Educational Codeforces Round 41 (Rated for Div. 2))
- Zynq7000开发系列-7(在Zybo上运行Linaro桌面系统)
- bzoj 2441 [中山市选2011]小W的问题
- 个人常用Git操作记录
- react-native入门学习( 一 )
- 【转】阐述Handler的实现原理
- Vue.js中data,props和computed数据
- ios调用Html内JS alert 不能点击关闭为甚?
- hihocoder1822 战舰日常任务