C 结构澄清

C 结构澄清,c,struct,C,Struct,在阅读aircrack ng源代码时,我注意到struct有许多不同的用法。 例如: 结构选项{…}opt typedef结构{…}投票 我认为struct的一般格式是 结构变量{…} 或 typedef结构变量{…}foo opt的用途是什么?为什么vote没有定义类型?在C中,创建变量的方式是: <type> <variable-name>; 虽然不太明显,但这与 struct option {...} opt; 类型为struct option{…}, 变量名

在阅读aircrack ng源代码时,我注意到struct有许多不同的用法。 例如:

结构选项{…}opt

typedef结构{…}投票

我认为struct的一般格式是

结构变量{…}

typedef结构变量{…}foo


opt
的用途是什么?为什么
vote
没有定义类型?

在C中,创建变量的方式是:

<type>  <variable-name>;
虽然不太明显,但这与

struct option {...} opt;
类型为
struct option{…}
, 变量名为
opt

所以这一行只创建了一个名为
opt
的变量,它是一个结构,包含所有描述的成员

在该行之后,您还描述了结构
选项
,因此您可以再次重用该名称,而无需重新描述结构的成员:

{
    /* make structure, and variable opt */
    struct option { int alpha; int beta; } opt;

    /* Use the structure previously defined */
    struct option second_opt;
}

typedef
创建类型别名。与:

typedef struct { /* ... */ } vote;
我们创建了一个匿名结构,
vote
是一个别名

struct option { /* ... */ } opt;

它声明了类型
struct option
,类型
struct option

的变量
opt
类型定义为
struct
名称提供了别名,特别是当
struct
具有很长的名称并且您希望将其重命名为较短的名称时

说你有

struct very_large_screen_metrics_info{};
以后可以将其重命名为:

typedef struct very_large_screen_metrics_info screen_info;

struct
定义中出现的情况是,类型定义与结构定义一起提供。因此,示例中的命名约定是完全有效的,并且是常规命名约定的替代方案。类型与您可能期望的
opt
vote

一样,以澄清:您是否可以重新使用该结构并仅按名称引用它(
option
),而不是重复其成员?
typedef struct very_large_screen_metrics_info screen_info;