馈赠20钱求讲const、static、extern、volatile用法! 请大神讲一下他们的区别和用法!!

2019-07-21 07:54发布

const、static、extern、volatile  他们在程序当中很常见,时常读代码的时候百度一下功能,但是总感觉他们好像有重叠的地方,
哪个大神程序写的好,能直接讲一下他们的用法,和区别是什么样的吗?

可以用例子简洁的说下,谢谢了!  



.
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
17条回答
小陀螺爱炒蛋
1楼-- · 2019-07-21 10:47
本帖最后由 小陀螺爱炒蛋 于 2016-11-8 16:59 编辑

1.const是常量的意思(其实还是变量),使用const修饰的变量将不能进行修改(C中其实是可以通过指针进行修改的,只是不能通过赋值修改),例如const int a = 10;
2.static是静态变量的意思,使用static修饰的变量要分成几种情况,第一种情况是将static变量定义在函数内部,那么这个变量将一直存在静态存储区中,下次函数进入的时候继续使用,而不会被编译器在函数退出的时候回收掉。第二种情况是将static放在全局,那么这个变量将只能被这个文件所调用,不能通过extern被其他的文件所引用。第三种情况是使用static定义函数,同理,这个函数也不能通过extern关键字被其他文件调用,只能被本文件的其他函数调用。
3.extern是引用非本文件定义的全局变量或者函数的关键字(但是不建议这样使用,影响了整个工程代码模块的封装,一般还是通过函数调用取到想要的数据,函数通过头文件声明接口)
4.volatile是容易改变的意思,volatile所代表的地址数据,是不仅可以被程序员通过软件修改而且可以被硬件所改变的(最常遇到和使用的,就是定义硬件寄存器地址)。
大致就这样,不完善的知识,请补充~
密耳
2楼-- · 2019-07-21 15:56
static 可以用,在一些函数下定义静态局部变量。。比如串口数据++;
extern必须用,定义的外部变量,来调用
其余两个意义不大。
volatile 更多的是告诉编译器,这个类型的变量不要被优化,,
dreamARM
3楼-- · 2019-07-21 17:47
密耳 发表于 2016-11-8 17:31
static 可以用,在一些函数下定义静态局部变量。。比如串口数据++;
extern必须用,定义的外部变量,来调 ...

他们的使用场合是怎样的呢?

extern 在本.C中定义,还是引用页.c中用 extern
东北小辉辉
4楼-- · 2019-07-21 18:03
dreamARM 发表于 2016-11-8 17:36
他们的使用场合是怎样的呢?

extern 在本.C中定义,还是引用页.c中用 extern

extern只能用来声明,不能用来定义,楼上小陀螺已经总结的很全面了。
dreamARM
5楼-- · 2019-07-21 23:39
 精彩回答 2  元偷偷看……
东北小辉辉
6楼-- · 2019-07-22 01:57
dreamARM 发表于 2016-11-8 17:41
如果一个数据在一个.C中定义,其它.c引用, 那么,是在本.c中标注extern 还是在引用的那个.c中用 extern ...

1.在引用的那个.c中extern
2.这样做是为了节省RAM,将不需要改变的数据放在flash中。

一周热门 更多>