如果在c中的结构内定义,枚举可以限制范围

时间:2014-10-24 12:01:22

标签: c struct enums namespaces scope

我想知道枚举是否可以通过将其置于结构中来限制它的访问方式。我知道这可以在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>

1 个答案:

答案 0 :(得分:5)

它不会编译,

你没有给枚举者一个标签

enum { MAX_SIZE = 10 } name ;

并且您声明了两个具有相同名称的枚举器常量

MAX_SIZE

关于标识符范围的C11标准:

  

6.2.1。 p7结构,联合和枚举标记的范围在出现之后开始   声明标记的类型说明符中的标记。 每个枚举常量都有范围   在枚举器列表中出现其定义的枚举器之后开始。任意   其他标识符具有在其声明者

完成之后开始的范围

这意味着您的第一个枚举器在整个文件中都有一个范围,从它向前声明的行开始。

具有相同名称的第二个枚举声明不正确,不应编译。

对于此规则声明枚举的位置无关紧要,结构与否,一旦声明它们从那一点开始就处于文件范围内。