我有遗留代码,它使用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/