【问题标题】:C Struct ClarificationC 结构说明
【发布时间】:2013-01-07 18:16:15
【问题描述】:

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

结构选项 {...} opt;

typedef struct {...} 投票;

我以为struct的一般格式是

结构变量 {...};

typedef struct var {...} foo;

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

【问题讨论】:

    标签: c struct


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      【解决方案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;
      }
      

      【讨论】:

      • 澄清一下:您能否重新使用该结构并仅通过名称 (option) 引用它而不是重复其成员?
      【解决方案3】:

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

      说你有

      struct very_large_screen_metrics_info{};
      

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

      typedef struct very_large_screen_metrics_info screen_info;
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-11
        • 2021-05-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多