在C和C++中声明用户定义类型的不同方法

ins*_*_tk -2 c types

这里定义的是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)

那么,为什么在声明用户定义类型的变量时存在差异呢?

120*_*arm 5

简短的回答:因为这是定义两种不同语言的方式.

更长的答案:在C,structenum名是分开的,不同的命名空间.这就是为什么你typedef struct s s;在C代码中看到很多类型的东西,所以你不需要使用struct.在C++中,structenum(和class)名称是定义struct/enum(通常是全局名称空间)的名称空间的一部分.所以你可以在没有typedef关键字的情况下引用它们.