如果在c中的结构中定义,枚举的作用域是否有限

如果在c中的结构中定义,枚举的作用域是否有限,c,struct,enums,namespaces,scope,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++中工作(这就是我的想法),但我不知道它是否能在C中工作。例如,如果我有两个不同的结构

struct SaticArrayA
{
    enum { MAX_SIZE = 10 };
    int array[MAX_SIZE];
};
struct SaticArrayB
{
    enum { MAX_SIZE = 20 };
    int array[MAX_SIZE];
};
这会接近编译吗?基本上,我想做我在C++中做的事情,并在“类”上给自己一个通用的命名约定,这样我就可以询问任何数组的大小,等等。 (另一方面,我基本上是想给自己一个更好的c静态数组,在我尝试将它传递到另一个作用域时,它不会丢失大小信息(通过衰减到指针)。

它不会编译

你没有给枚举器一个标记

enum { MAX_SIZE = 10 } name ;
您声明了两个同名的枚举数常量

MAX_SIZE
C11关于压头范围的标准:

6.2.1。p7结构、联合和枚举标记的作用域在 声明标记的类型说明符中的标记每个枚举常量的作用域 在枚举数列表中其定义枚举数出现后立即开始。Any 另一个标识符的作用域在其声明符完成后立即开始

这意味着您的第一个枚举数在整个文件中有一个作用域,从它声明的行开始

同名的第二个枚举声明不正确,不应编译


无论在何处为该规则声明枚举(无论是否为struct),一旦声明,从那时起它们就在文件范围内。

明显的替代方法是采用命名约定,并将常量命名为类似于
静态数组\u a\u MAX\u SIZE
,在这种情况下,我可能会使用
#define
而不是
enum
。问题是信息是否可以属于结构(不可变)