我正在阅读 aircrack-ng 源代码,并注意到 struct 的许多不同用途。例如:
结构选项 {...} 选择;
typedef struct {...} 投票;
我认为 struct 的一般格式是
结构变量 {...};
或者
typedef struct var {...} foo;
目的是什么opt
,为什么vote
没有定义类型?
typedef
创建一个类型别名。和:
typedef struct { /* ... */ } vote;
我们创建一个匿名结构,其中vote
是一个别名。
struct option { /* ... */ } opt;
它声明了类型和类型struct option
的变量。opt
struct option
在 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;
}
类型定义为名称提供别名,struct
尤其是当名称struct
很长并且您想将其重命名为更短的名称时。
说你有
struct very_large_screen_metrics_info{};
您可以稍后将其重命名为:
typedef struct very_large_screen_metrics_info screen_info;
定义中发生的struct
是类型定义与结构定义一起提供。因此,示例中的命名约定是完全有效的,是常规命名约定的替代方案。类型如您所料opt
,并且vote