提问人:xaviersjs 提问时间:10/24/2014 更新时间:10/24/2014 访问量:821
如果在 c 中的结构中定义,can 枚举的范围有限
Can enums have limited scope if defined inside a struct in c
问:
我想知道是否可以通过将枚举放在结构中来限制其访问方式。我知道这在 C++ 中有效(这就是我得到这个想法的地方),但我不知道它是否在 C 中有效。因此,例如,如果我有两个不同的结构
struct SaticArrayA
{
enum { MAX_SIZE = 10 };
int array[MAX_SIZE];
};
struct SaticArrayB
{
enum { MAX_SIZE = 20 };
int array[MAX_SIZE];
};
这甚至会接近编译吗?基本上,我想做我在 C++ 中会做的事情,并给自己一个跨“类”的通用命名约定,这样我就可以询问任何数组的大小是多少,等等。
(附言我本质上是在尝试给自己一个更好的 c 静态数组,在我尝试将其传递给另一个作用域的那一刻,它不会丢失大小信息(通过衰减到指针)。
答:
5赞
2501
10/24/2014
#1
它不会编译,
您没有为枚举器提供标记
enum { MAX_SIZE = 10 } name ;
并且您声明了两个同名的枚举器常量
MAX_SIZE
关于识别器范围的 C11 标准:
6.2.1. p7 结构、联合和枚举标签的作用域在 声明标记的类型说明符中的标记。每个枚举常量的作用域 在枚举器列表中出现其定义枚举器之后开始。任何 其他标识符的作用域在其声明器完成后立即开始
这意味着第一个枚举器在整个文件中有一个范围,从声明它的行开始。
具有相同名称的第二个枚举声明不正确,不应编译。
无论在哪里为此规则声明枚举,无论是否为 struct,一旦声明,它们从那时起就处于文件范围内。
上一个:有符号/无符号特征编程
评论
STATIC_ARRAY_A__MAX_SIZE
#define
enum