2010-10-11 23 views
0
typedef struct error{int warning, error, exception;}error; 

main() 
{ 
    error g1; 
    g1.error =1; 
    printf("%d",g1.error); 
} 

这里使用的是错误的是代码示例,其输出为1由struct关键字

但我需要的是如何验证码正在开发一种解释?

回答

2

让我们先从洋葱内:

struct error 
{ 
    int warning, error, exception; 
}; 

定义一个结构称为error有3个要素:warningerrorexception

要使用它,您可以用struct error g1;替换您的main函数中的error g1;行。然后你将这个结构定义包装在一个typedef中,这基本上告诉编译器,有一个类型error,它相当于struct error。这些名称都在独立的空间中:类型,结构和结构中的元素。所以他们不冲突。也就是说,写起来有点干净

typedef struct 
{ 
    int warning, error, exception; 
} error; 

因为它没有给出struct 2的名字。我给出的第一个版本也是有效的;有些人更喜欢明确使用结构。

2

这是什么,你不明白在这段代码? error不是C中的保留字,所以您可以自由使用它作为(变量/结构)名称。

你定义含有3个int字段struct,实例化其作为局部变量g1,分配1给它的字段之一,然后打印在标准输出该字段。如果您有任何更具体的问题,请澄清。

1

您定义了一个结构error,它具有一个名为errorint成员。您为struct error定义了typedef(换句话说,别名),名称为error。然后您使用typedef名称创建了struct error的一个实例,名为g1。然后,您将值1分配给error实例g1error成员。最后,你打印的值为g1.error

结构名称和typedef名称占用单独的名称空间—它们可以是相同的。在C语言中,你必须关键字struct前结构的名字:

struct S{ /*...*/ }; 

struct S instance1; 

而不是之前的typedef名称:

struct S{ /*...*/ }; 
typedef struct S S; 

S instance2; 

你也可以的typedef工会和枚举。您可以将结构定义有一个typedef定义组合:

typedef struct S { /* ... */ } S; 

而且你可以省略结构名称:

typedef struct { /* ... */ } S; 

在这种情况下,结构类型只能通过typedef的简称。

1

这是c中typedef结构的一个非常基本的用法。我建议你访问the wikipedia page on structs的总体概述,但在短:

的第一行创建一个新的结构类型struct error其中包含3个整数:warningerrorexception。 typedef充当别名,将struct error重命名为error,以便您可以通过短名称引用此类型的项目。

主内部的代码然后在堆栈上创建一个新的error,将其error属性设置为1,然后将其打印出来。