1
Tompes 2018-03-29 19:01:41 +08:00
惊了,这算自己吃设定么...... |
2
liuminghao233 2018-03-29 19:17:33 +08:00 via iPhone
enum 我是拿来放 switch 用的
|
3
but0n 2018-03-29 23:14:09 +08:00
<img src="https://user-images.githubusercontent.com/7625588/38096736-30e4b026-33a6-11e8-9bac-529e4ee58e8b.png">
https://user-images.githubusercontent.com/7625588/38096736-30e4b026-33a6-11e8-9bac-529e4ee58e8b.png main.cpp:30:9: error: assigning to 'enum cb' from incompatible type 'int' b = 0; ^ 1 error generated. make[1]: *** [main.o] Error 1 make: *** [main] Error 2 enum cb { r = 0xFF0000, g = 0xFF00, b = 0xFF, }; int main(int argc, char const *argv[]) { enum cb a, b; a = r; b = 0; printf("hello, %d\, %dn", a, b); return 0; } 怎么说 |
5
am241 2018-03-29 23:31:42 +08:00
c 本来就是弱类型语言,在明白怎么回事的情况下,允许用户使用各种黑科技。把"0"强制转换成函数指针然后 call 过去的用法也很常见
enum 至少有个用途是可以自增:如果一个变量代表了 n 个状态,用户又不在乎用哪些值来代表这些状态的时候,用 enum 就很合适了 |
7
sinxccc 2018-03-30 00:49:49 +08:00
能增加代码可读性还不够么?
代码写出来是让人读的。 |
8
geelaw 2018-03-30 01:01:41 +08:00 via iPhone
就很迷…… void * 换类型需要显式转换难道不是和 int to enum 需要显式转换一样是好事儿么
|
9
vincentxue 2018-03-30 03:33:03 +08:00
楼主你没说错。
C 中的枚举类型的作用是让程序员更清楚地编写程序,它实际上就是一组整数(其实也不一定,只是通常这样假设)常量,最主要的作用就是省去你要写很多 #define。 C++ 中的 enum 是你创建的一个类型。 clang 是支持 C enum 类型检查的。 |
10
vincentxue 2018-03-30 03:35:42 +08:00
@Tompes 你这输出没毛病啊。。
|
11
liuhaotian 2018-03-30 07:06:59 +08:00 via iPhone
You can do a enum like
enum status { ST_READY = 1 << 0, /* 1 */ ST_WAIT = 1 << 1, /* 2 */ ST_ERROR = 1 << 2, /* 4 */ ST_HALT = 1 << 3, /* 8 */ ST_ETC = 1 << 4, /* 16 */ }; Then define an object of that type enum status status; and set it to the bitwise OR of some 'simple' statuses status = ST_WAIT | ST_ERROR; /* recoverable error */ Note that the value ST_WAIT | ST_ERROR is 6 and that that value is not part of the enum. SOF: https://stackoverflow.com/a/7431680 |
12
pkookp8 2018-03-30 07:20:42 +08:00 via Android
在我看来枚举和宏定义没差别。。。
|
13
blahgeek 2018-03-30 08:25:21 +08:00 via iPhone
是
rust 的 enum 了解一下 |
14
Tompes 2018-03-30 09:47:42 +08:00
|
15
gggxxxx 2018-03-30 10:01:49 +08:00
enum 的意义是一种常用的抽象方法啊,大多数编程语言都有。赋值需求直接用变量来做不是更合理?
另一方面 c 语言算很古老的了,不能拿现代新编程语言来对比。 |
16
geelaw 2018-03-30 10:11:17 +08:00
|
20
miaowei OP @geelaw 一个指针,我声明为 void*显然是想避开类型检查,一个整型,我声明为 enum,显然是需要编译器给我掌个眼。就我一个人是这样想的?
|
21
miaowei OP |
22
geelaw 2018-03-31 01:53:58 +08:00 via iPhone
|