|
在咱们的EEWORLD论坛里隐藏着一支队伍庞大的水军,相信常来的网友们都有所听说。今天,咱们的一名水兵正在学习C语言枚举类型方面的知识点,他有点困惑,于是发起了一个小问题,引来了大家的各种讨论。下面做下本次讨论课的记录,可能刚好你也正在学习这一块,可能你了解过却是不求甚解,今天就让我们一起挖一挖C枚举吧~
水兵1号发问:C里面的枚举是属于基本数据类型,还是构造数据类型,枚举里面的值是不是和结构体一样,在后面当变量使用,改变的?
A:枚举不会改变的吧,里面的值是常量了,你要修改得在里面修改
1号:枚举定义好之后,不能改变里面的值了?
A:好像是递增,你取了第一个的值,下面的值都是递增了
A:可以啊,我也不太明白。队长,色哥,主任上
B冒泡:你定了一个枚举类型,里面设定的枚举值是常量。你定义一个枚举类型的变量,可以改变这个变量的值,这个变量的取值在你一开始设定的枚举类型的枚举值里面选
A:说得对。里面的值还是递增的
B:一般来说是递增的。但是不是绝对的
A:比如我在第三个值重新变个值,那么下面就按照第三个值来递增
A:递减的我好像没看过
B:我没说递减啊,我见过的世面少,我没见过递减的,但是我就记得当初学的时候有说不是绝对的。。有语言可以自己强制编码的
----等待其他成员上线中---表情党出没 ---你可以当作中场休息
C君上线:枚举就是
static A=1;
#define a A
#define b A++
#define c A+ = 2
。。。。
1号:不知道,枚举定义的时候,好不好加const的
C:const是const enum是#define,编译的时候替换,而不是常量,常量 是数据类型,哈哈 你晕了没 你晕了我目的就达到了~
D被晕出来了:(+﹏+)~
E:定义枚举的值是常量,定义好后就不能变了
D:声明枚举变量跟什么其它一样的,可以加const
1号:E君救星你出来啦~~数组前面加一个CONST,就会把数据定死,不能修改了,我在想枚举,结构体这种,是不是也可以加一个CONST,把数据固定死的?
C:#define前面是不会加const的 一个道理
F:枚举定死有啥好处?
C:enum是数据类型,成员就是常量 定义好了就直接替换 不会出现改动
1号:C啊,你的意思是结构体,枚举不能加CONST的
D:可以加const
C:枚举放在结构体里面?
F:很多种方法都可以实现相同的功能,选最好的实现方法就好了。
D:自己这个小程序跑一下就知道了
C:不是不能加 不报错也可以加 没意义
F:本来i++可以办的事 你非要写成 i=i+1 就是闲的
1号:是这样的,单片机里数组定义好,就是在内存区定义的,加了CONST,就是把数据存到程序区去了,我在想,结构体,枚举定义,是不是也有这种概念在里面?
C:enum color
{
a=1,
b,
c,
d
}
就相当于
#define a 1
#define b 2
#define c 3
#define d 4
F:你们说的好复杂,数组以后的内容我都没有学过……但感觉上面的两者应该是不相等的
G君打算用代码实践说话:
G:不光可以加const 还可以加static
A:还可以静态?不会报错吗?
G:你试试啊
E:@1号 结构体,联合体,类这些数据类型的定义是不占存储空间的
G:E啊,不同编译器对此解释不大一样啊,有的占有的不占
E:@G君 怎么个占法?
G君又扔出一波图片:
C:枚举常量存储在数据段的静态存储区里
E:@G 你那是输出大小而已,并没占内存
G:vs的c编译器不允许空结构体
D:那是申明了,申明一个变量才有空间
G:
1号:E,G,继续水,小弟早上看了你们的聊天,收获很多
E:不明白的就写代码,深究看代码生成的汇编
H大大来发言:C是C,别听瞎说
E:调试的时候,有时候是要看汇编的
I,F:怼
G:是,找入口地址,然后绕过验证
E:那是黑客
-------省略中间若干对话,场面开始失控-------一段时间后回归正题---------
H:
第一个问题,const那个,就几句话解释:
第一句,const修饰的是变量,不是类型。所以对enum,struct类型定义来说,,,没用。
第二句,enum引入的是类型符号,和数值没太多关系,虽然你可以定义1,2,3,但是同样你也可以不定义1,2,3,只当符号用,
第三句,#define 是宏处理的字符替换,而enum是C里面的类型,好处是enum有类型检查,而#defien没有。
完毕。
收尾:
D:struct a{} bbc; 这个已经是申明一个变量了,肯定有内存,E说的是定义, struct a{}; 这样的
------
1号:在轻松中学习,在学习中放松,不要把学习当成负担,学习是快乐的,i love 水群
小伙伴们对上面讨论的内容有任何异议和疑问都可以跟帖继续发问哦~同样,有相关的问题也可以再发帖求助或者觉得上述讨论有些点你觉得值得一提却没有提到,=热烈欢迎发帖来发表你的个人意见和见解!!!
|
 |
 |
 |
 |
加EE小助手好友, 入技术交流群 |
EE服务号 精彩活动e手掌握 |
EE订阅号 热门资讯e网打尽 |
聚焦汽车电子软硬件开发 认真关注技术本身 |
|