我想知道枚举是否可以通过将其置于结构中来限制它的访问方式。我知道这可以在C ++中工作(这是我得到这个想法的地方),但我不知道它是否可以在c中工作。所以,例如,如果我有两个不同的结构
struct SaticArrayA
{
enum { MAX_SIZE = 10 };
int array[MAX_SIZE];
};
struct SaticArrayB
{
enum { MAX_SIZE = 20 };
int array[MAX_SIZE];
};
这甚至会接近编译吗?基本上,我想做我将在C ++中做的事情并给自己一个共同的命名约定#34;类"所以我可以问任何数组它的大小是什么等等。
(ps我基本上试图在c中给自己一个更好的静态数组,它不会失去大小信息(通过衰减到指针)第二个我试图将它传递给另一个范围)。< / p>
答案 0 :(得分:5)
它不会编译,
你没有给枚举者一个标签
enum { MAX_SIZE = 10 } name ;
并且您声明了两个具有相同名称的枚举器常量
MAX_SIZE
关于标识符范围的C11标准:
6.2.1。 p7结构,联合和枚举标记的范围在出现之后开始 声明标记的类型说明符中的标记。 每个枚举常量都有范围 在枚举器列表中出现其定义的枚举器之后开始。任意 其他标识符具有在其声明者
完成之后开始的范围
这意味着您的第一个枚举器在整个文件中都有一个范围,从它向前声明的行开始。
具有相同名称的第二个枚举声明不正确,不应编译。
对于此规则声明枚举的位置无关紧要,结构与否,一旦声明它们从那一点开始就处于文件范围内。