c 语言的 enum 是个残废设计吧?

2018-03-29 18:40:53 +08:00
 miaowei
enum 设计的初衷是好的,像
enum colorbase{red = 0xff0000, green =0xff00, blue=0xff};
它定义了一个整型,且这个整型比正常的 int 的取值范围小,因为三基色只有三个值. 用枚举很合适.
但我们对 enum 类型的变量赋值时,C 编译器又不做类型检查(肯定是 C 标准没要求):
enum colorbase x;
x = red; //正确
x = 0; //也正确 ?!
那 enum 的意义何在?仅仅是增加一点代码可读性?用它当然是想让编译器帮着检查啊.

c++对 enum 的实现就很让人满意,上面的 x=0, g++会报错:
error: invalid conversion from ‘ int ’ to ‘ colorbase ’

我对 C 的 enum 好奇很久了,对 C++又不熟,今天是偶然发现 C++的实现正合我意,赶紧发帖子唠叨两句...哎,其实我用过一阵子 C++, 其它都还好,就是受不了 void *赋值给指针时还要显式的做类型转换,不然大概早切换过去了.
3579 次点击
所在节点    问与答
24 条回复
miaowei
2018-03-30 22:35:39 +08:00
@sinxccc 主要是
@vincentxue clang 支持?多谢,我回去试一下。
geelaw
2018-03-31 01:53:58 +08:00
@miaowei void * 表达的是“不从指针的类型而是从其他地方知道是什么类型”而不是“自动变成任何类型”。

为什么你不想“写 enum 是为了定义几个字面量”呢?
but0n
2018-03-31 16:47:03 +08:00
@miaowei clang 应该可以的 你试试
miaowei
2018-03-31 20:42:21 +08:00
@but0n 嗯,刚找到选项-Wenum-conversion -Wassign-enum . 在 google 上和 SO 上找一圈没找到,在 reddit 上找到的... gcc 不支持这两个选项.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/442603

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX