【问题标题】:Let's talk about struct [closed]让我们谈谈结构 [关闭]
【发布时间】:2011-10-07 07:24:05
【问题描述】:

我知道 struct 是什么,但还没有见过这样的用法。 谁能更详细地向我解释该代码的作用?

static struct option const long_options[] =
{
  {"all", no_argument, NULL, 'a'},
  {"kernel-name", no_argument, NULL, 's'},
  {"sysname", no_argument, NULL, 's'},  /* Obsolescent.  */
  {"nodename", no_argument, NULL, 'n'},
  {"kernel-release", no_argument, NULL, 'r'},
  {"release", no_argument, NULL, 'r'},  /* Obsolescent.  */
  {"kernel-version", no_argument, NULL, 'v'},
  {"machine", no_argument, NULL, 'm'},
  {"processor", no_argument, NULL, 'p'},
  {"hardware-platform", no_argument, NULL, 'i'},
  {"operating-system", no_argument, NULL, 'o'},
  {GETOPT_HELP_OPTION_DECL},
  {GETOPT_VERSION_OPTION_DECL},
  {NULL, 0, NULL, 0}
};

【问题讨论】:

  • 它是一个结构数组的初始化器。
  • 在 C 中,struct 基本上是类型名称的一部分。所以这是struct options 的staticconst 数组([]),命名为long_options

标签: c


【解决方案1】:

这是struct option 元素的静态数组的初始化。这个结构将有四个元素(char*、其他、一个指针和一个字符),这些是值。请注意,数组以 NULL 值结束,以防止通过它的搜索超出 end,并注意如何使用与结构相关的一些常量。

【讨论】:

    【解决方案2】:

    它定义了一个名为long_options 的静态(即在其他.c 模块中不可见)常量数组,其结构类型为option。像{"all", no_argument, NULL, 'a'} 这样的单独的行是struct option 类型的元素。我认为这里没有问题。

    【讨论】:

      【解决方案3】:

      此代码正在创建一个结构选项数组。每一行都包含该数组中一项的值。

      从代码中我假设结构选项是这样的

      struct option
      {
          const char * option_name;
          enum argument_type  argument;
          void * pointer; //not enough context
          char short_option;
      };
      

      【讨论】: