c语言多个数组枚举,枚举类型值作为C中数组的长度

这篇博客讨论了C++11和C03标准中关于枚举器作为整数常量表达式用于数组边界的情况。引用了C++11草案标准的5.19节,指出枚举器可以用于数组边界、位域长度等。作者通过测试表明,这个问题在Visual Studio 2008之后的版本中已被修复。同时,该博客也提到了C98标准下的相似规定,并提供了使用const int作为替代方案的例子。
摘要由CSDN通过智能技术生成

在C 11和C 03中,枚举器(C 11中的无范围枚举)是整数常量表达式,因此可用于数组边界.我们可以通过转到

draft C++11 standard部分5.19 [expr.const]看到C 11的这个,它说:

An integral constant expression is an expression of integral or

unscoped enumeration type, implicitly converted to a prvalue, where

the converted expression is a core constant expression. [ Note: Such

expressions may be used as array bounds (8.3.4, 5.3.4), as bit-field

lengths (9.6), as enumerator initializers if the underlying type is

not fixed (7.2), as null pointer constants (4.10), and as alignments

(7.6.2). —end note ]

和/或C 03我们可以从草案C 03标准或closest we can get同一段第1段看到这一点,其中说:

[…]An integral constant-expression can involve only literals of

arithmetic types (2.13, 3.9.1), enumerators, non-volatile const

variables or static data members of integral or enumeration types

initialized with constant expressions (8.5), non-type template

parameters of integral or enumeration types, and sizeof

expressions[…]

在rextester这个代码compiles fine for VC,所以这不再是当前版本中的问题,这一定是2008年最终修复的错误.还在2015年12月3日更新的webcompiler上进行了测试,因此这也适用于最新版本之一.

一种替代方法可能是使用const int,例如:

const int len = LEN2 ;

这将取决于Visual Studio 2008是否认为枚举器不是整数常量表达式,或者它是否只是在数组边界的上下文中,希望它只是后者.

C 98

据我所知,这也适用于C 98,当使用-std = c 98时,gcc和clang都允许这样做,没有公众可以使用的C 98标准草案,所以我可以确认.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值