c - 实现范围数据类型

标签 c enums iterator iteration range

我有遗留代码,它使用enum作为范围并迭代该范围。我需要将其移植到新平台并使其更安全。

注意:枚举无法安全地进行迭代,因为值之间可能存在“漏洞”或间隙。

我正在寻找范围类型的安全 C 语言模式。

例如,给定一个范围(红色、紫色、蓝色、绿色、黄色、橙色),我想迭代每个值,例如“FOR color IN(红色、紫色、蓝色、绿色、黄色、橙色)” .

当我搜索 SO 和网络时,我得到了有关数据类型范围的回复,例如整数的范围。

此代码将驻留在使用 ARM7 处理器的嵌入式系统上。

最佳答案

只要让编译器选择值,枚举就可以做得很好。这样一来,就不会有漏洞了。例如,您可以这样做:

enum colors {
    FIRST_COLOR=0,
    RED=FIRST_COLOR, VIOLET, BLUE, GREEN, YELLOW, ORANGE,
    NUM_COLORS
}

enum colors color;
for (color=FIRST_COLOR; color<NUM_COLORS; color++) {
    // whatever
}

引用 ANSI C 标准:

If the first enumerator has no = , the value of its enumeration constant is 0. Each subsequent enumerator with no = defines its enumeration constant as the value of the constant expression obtained by adding 1 to the value of the previous enumeration constant

关于c - 实现范围数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8747155/

相关文章:

使用一个迭代器将列表循环分为两部分的 Pythonic 方式

c - c中下标中的字符串

c - BIO_set_fp() 在 Windows 上崩溃

ios - 处理硬编码列表/选项/下拉列表等的合法方法

java - 在 Java 中的枚举值之间切换

c++ - 根据一些规则随机选择枚举值

c++ - 直接访问STL "set"的元素

c - 是什么导致段错误?

c - C 判断文件中是否包含字符串

python - 发电机的冗余使用? (Python)