2017-07-31 111 views
-3

重复假设我有以下枚举:检查枚举

enum { 
    PARM1 = 1, 
    PARM2, 
    PARM3, 
    PARM_MAX 
}; 

我可以在其中添加新成员,但我要确保在编译时,如果可能的话,所有的成员都是连续增加并且没有重复。我想知道如何在C代码中进行验证。我相信这是一项数学任务。

+3

创建所有可能元素的数组。然后在其上运行您最喜欢的重复查找算法。但显然它是由C标准保证的,所以我看不出任何意见。 –

+4

你的定义没有任何重复,并且它的所有成员都是连续递增的。有什么要检查的? –

+4

在运行时验证编译时常量有什么意义? – melpomene

回答

1

如果使用enum声明,这个数字将是

enum { 
    PARM1 = 1, 
    PARM2, /* = 2 */ 
    PARM3, /* = 3 */ 
    PARM_MAX /* = 4 */ 
}; 

这是没有必要检查这个,所有的编译器使用此实现。

像Cubbi说,在cppreference.com

如果枚举后跟=常数表达式,其值是常量表达式的 值。如果枚举器后面没有= 常量表达式,则其值为比同一枚举中前一个枚举器的值 大1的值。第一个枚举器的值(如果不使用= constant-expression)为零。

+2

具有相同值的两个枚举常量是完全合法的。 – Olaf

+0

是的,但默认情况下,两个枚举常量具有连续值。 –

+0

这似乎并不是问题的关键。但是,我不确定OP本人是否知道他的问题是什么(或者如果有的话 - 我也看不到一个)。 – Olaf