C结构澄清

时间:2013-01-07 18:16:15

标签: c struct

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

  

struct option {...} opt;

     

typedef struct {...}投票;

我认为struct的一般格式是

  

struct var {...};

  

typedef struct var {...} foo;

opt的目的是什么,vote如何定义类型?

3 个答案:

答案 0 :(得分:4)

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

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

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

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

它声明了struct option类型,以及opt类型的变量struct option

答案 1 :(得分: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;
}

答案 2 :(得分:0)

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

说你有

struct very_large_screen_metrics_info{};

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

typedef struct very_large_screen_metrics_info screen_info;

struct定义中发生的事情是类型定义随结构定义一起提供。因此,示例中的命名约定是完全有效的,并且是常规命名约定的替代方法。这些类型与您预期的optvote

一样