typedef struct error{int warning, error, exception;}error;
main()
{
error g1;
g1.error =1;
printf("%d",g1.error);
}
以下是其输出为1的代码示例。
但我需要解释一下这段代码是如何工作的?
答案 0 :(得分:2)
让我们从洋葱的内部开始:
struct error
{
int warning, error, exception;
};
它定义了一个名为error
的结构,包含3个元素:warning
,error
和exception
。
要使用它,您可以使用error g1;
替换main
函数中的struct error g1;
行。然后将该结构定义包装在typedef中,这实际上告诉编译器,类型error
等同于struct error
。名称都在独立的空间中:类型,结构和该结构中的元素。所以他们不会发生冲突。也就是说,编写
typedef struct
{
int warning, error, exception;
} error;
因为它没有给出struct 2的名字。我给的第一个版本也是有效的;有些人更喜欢明确他们对结构的使用。
答案 1 :(得分:2)
这段代码中你不明白的是什么? error
不是C中的保留字,因此您可以将其用作(变量/结构)名称。
您定义了包含3个struct
字段的int
,将其实例化为本地变量g1
,将其分配给其中一个字段,然后在标准输出上打印该字段。如果您有任何更具体的问题,请澄清。
答案 2 :(得分:1)
您定义了一个名为error
的{{1}}成员的结构int
。您为error
定义了一个名为struct error
的typedef(换句话说,别名)。然后,您使用typedef名称创建了error
的实例,名为struct error
。然后,您将值g1
分配给1
实例error
的{{1}}成员。最后,您打印了error
。
struct name和typedef名称占用不同的名称空间 - 它们可以是相同的。在C中,必须将关键字g1
放在结构名称之前:
g1.error
但不是在typedef名称之前:
struct
您还可以输入dede联合和枚举。您可以将结构定义与typedef定义结合使用:
struct S{ /*...*/ };
struct S instance1;
您可以省略结构名称:
struct S{ /*...*/ };
typedef struct S S;
S instance2;
在这种情况下,结构类型只能通过typedef引用。
答案 3 :(得分:1)
这是c中typedef结构的一个非常基本的用法。我建议您访问the wikipedia page on structs进行总体概述,但简而言之:
第一行创建一个新结构类型struct error
,其中包含3个整数:warning
,error
和exception
。 typedef充当别名,将struct error
重命名为error
,因此您只需使用短名称即可引用此类型的项目。
main中的代码然后在堆栈上创建一个新的error
,将其error
属性设置为1,然后将其打印出来。