【发布时间】:2013-01-07 18:16:15
【问题描述】:
我正在阅读 aircrack-ng 源代码,并注意到 struct 的许多不同用途。 例如:
结构选项 {...} opt;
typedef struct {...} 投票;
我以为struct的一般格式是
结构变量 {...};
或
typedef struct var {...} foo;
opt 的用途是什么?为什么vote 没有定义类型?
【问题讨论】:
我正在阅读 aircrack-ng 源代码,并注意到 struct 的许多不同用途。 例如:
结构选项 {...} opt;
typedef struct {...} 投票;
我以为struct的一般格式是
结构变量 {...};
或
typedef struct var {...} foo;
opt 的用途是什么?为什么vote 没有定义类型?
【问题讨论】:
typedef 创建一个类型别名。与:
typedef struct { /* ... */ } vote;
我们创建一个匿名结构,其中vote 是一个别名。
struct option { /* ... */ } opt;
它声明了struct option 类型和struct option 类型的变量opt。
【讨论】:
在 C 中,创建变量的方式是:
<type> <variable-name>;
这很明显:
int foo;
虽然不太明显,但和
完全一样struct option {...} opt;
类型为struct option {...},
变量名是opt。
所以这一行只创建了一个名为opt 的变量,它是一个结构,其中包含所有描述的成员。
在该行之后,您还描述了结构 option,因此您可以再次重用该名称而无需重新描述结构的成员:
{
/* make structure, and variable opt */
struct option { int alpha; int beta; } opt;
/* Use the structure previously defined */
struct option second_opt;
}
【讨论】:
option) 引用它而不是重复其成员?
类型定义为struct 名称提供别名,尤其是当struct 的名称很长并且您想将其重命名为更短的名称时。
说你有
struct very_large_screen_metrics_info{};
您可以稍后将其重命名为:
typedef struct very_large_screen_metrics_info screen_info;
struct 定义中发生的事情是类型定义与结构定义一起提供。因此,示例中的命名约定是完全有效的,是常规命名约定的替代方案。类型如您所料opt 和vote
【讨论】: