这里定义的是ANSI C中的枚举.
enum Security_Levels
{
black_ops,
top_secret,
secret,
non_secret
};
Run Code Online (Sandbox Code Playgroud)
现在声明类型为Security_Levels的s [4],我在main()代码中写了这个
Security_Levels s[4];
Run Code Online (Sandbox Code Playgroud)
我收到这个错误:
file.c: In function ‘main’:
file.c:13:3: error: unknown type name ‘Security_Levels’
Security_Levels s[4];
Run Code Online (Sandbox Code Playgroud)
但是当我宣布这样的时候
enum Security_Levels s[4];
Run Code Online (Sandbox Code Playgroud)
有效!
Security_Levels s[4];
Run Code Online (Sandbox Code Playgroud)
这个^在C++中工作,但在C中抛出上述错误
在C和C++中使用struct时我也有类似的问题.
struct structure_name variable_name; //this is how it works in C
structure_name variable_name; // in case of C++
Run Code Online (Sandbox Code Playgroud)
那么,为什么在声明用户定义类型的变量时存在差异呢?
简短的回答:因为这是定义两种不同语言的方式.
更长的答案:在C,struct和enum名是分开的,不同的命名空间.这就是为什么你typedef struct s s;在C代码中看到很多类型的东西,所以你不需要使用struct.在C++中,struct和enum(和class)名称是定义struct/enum(通常是全局名称空间)的名称空间的一部分.所以你可以在没有typedef关键字的情况下引用它们.