要命名 a struct
,请使用
struct Str1
{
...
};
您现在可以struct Str1
在要引用此特定struct
.
如果你只想使用它Str1
,你需要使用typedef
,例如
typedef struct tagStr1
{
...
} Str1;
或者typedef struct Str1 Str1;
,如果我们有第一种类型的struct Str1
声明。
要创建一个struct
没有名称的实例(实例表示“该类型的变量”):
struct
{
...
} Instance;
由于struct
它没有名称,因此不能在其他任何地方使用,这通常不是您想要的。
在 C(相对于 C++)中,你不能在另一个结构的类型定义中定义一个新的类型结构,所以
typedef struct tagStr1
{
int a, b, c;
typedef struct tagStr2
{
int x, y, z;
} Str2;
} Str1;
不会编译。
如果我们把代码改成这样:
typedef struct tagStr1
{
int a, b, c;
struct tagStr2
{
int x, y, z;
};
} Str1;
typedef struct tagStr2 Str2;
将编译 - 但至少 gcc 给出了“struct tagStr2 不声明任何内容”的警告(因为它希望您实际上想要在struct tagStr2
内部拥有一个类型的成员Str1
。