2

我正在阅读 aircrack-ng 源代码,并注意到 struct 的许多不同用途。例如:

结构选项 {...} 选择;

typedef struct {...} 投票;

我认为 struct 的一般格式是

结构变量 {...};

或者

typedef struct var {...} foo;

目的是什么opt,为什么vote没有定义类型?

4

3 回答 3

4

typedef创建一个类型别名。和:

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

我们创建一个匿名结构,其中vote是一个别名。

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

它声明了类型和类型struct option的变量。optstruct option

于 2013-01-07T18:21:50.527 回答
2

在 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;
}
于 2013-01-07T18:21:08.807 回答
0

类型定义为名称提供别名,struct尤其是当名称struct很长并且您想将其重命名为更短的名称时。

说你有

struct very_large_screen_metrics_info{};

您可以稍后将其重命名为:

typedef struct very_large_screen_metrics_info screen_info;

定义中发生的struct是类型定义与结构定义一起提供。因此,示例中的命名约定是完全有效的,是常规命名约定的替代方案。类型如您所料opt,并且vote

于 2013-01-07T18:25:14.913 回答