C 语言中的枚举类型安全性

发布日期:2026-06-22 10:03:28   浏览量 :3
发布日期:2026-06-22 10:03:28  
3

C 语言标准允许程序员定义新类型,包括枚举类型(或称“枚举”),以提高程序的可读性和类型安全性。本文探讨了枚举类型的规范、增强枚举类型安全性的编译器选项,以及类型安全性如何防止运行时错误。重点在于针对 ARM32(例如 Cortex-M 微控制器)的 GCC 和 Clang C 编译器,但相同的结论应适用于所有 C 语言目标平台,包括 RISCV、x86_64 和 ARM64。

目录

C 语言枚举

C 语言枚举允许定义作为符号集合的新类型。每个符号都映射到一个整数值。该整数值可以是任意的,也可以是表示中有用的部分。

例如,颜色的枚举可能如下所示:

enum color {
    COLOR_RED = 0,
    COLOR_GREEN = 1,
    COLOR_BLUE = 2,
};

将值 0 赋给红色,1 赋给绿色,2 赋给蓝色是任意的——使用的值可以是任意三个数字的组合。由于使用具有任意值的唯一整数非常常见,因此不包含值的枚举成员定义会自动被赋值为前一个值加一:

enum color {
    COLOR_RED = 0,
    COLOR_GREEN,  // 自动为 1
    COLOR_BLUE,  // 自动为 2
};

这更简单,而且在新符号可能出现在定义中的任何位置的情况下,这是首选方法,因为它可以防止在需要唯一值时意外创建共享值。

另一方面,速度限制的枚举可能映射到有用且完全非任意的常量整数值:

enum speed_limit {
    SPEED_LIMIT_30_KPH = 30,
    SPEED_LIMIT_60_KPH = 60
    SPEED_LIMIT_90_KPH = 90,
};

最后,枚举值不需要是唯一的。多个符号可以映射到同一个字面整数,尽管通过映射到符号而不是字面整数,意图通常更加清晰:

enum font {
    FONT_TIMES_NEW_ROMAN = 0,
    FONT_HELVETICA,
    FONT_DEFAULT = 

免责声明:本文内容来自互联网,该文观点不代表本站观点。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请到页面底部单击反馈,一经查实,本站将立刻删除。

关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
Copyright © 2025-2027 ToB产业网址导航 公安备案 浙公网安备33010602013138号 浙ICP备16025413号-9
支持 反馈 订阅 数据