почему массиву опций структуры требуется дополнительная фиктивная запись при использовании getopt_long - PullRequest
5 голосов
/ 16 декабря 2010

Например, массив опций:

static struct option const long_options[] =
{
  {"help", no_argument, 0, 'h'},
  {"version", no_argument, 0, 'v'},
  {0, 0, 0, 0}
};

Это для заполнения?

Ответы [ 2 ]

3 голосов
/ 17 декабря 2010

Посмотрите на справочную страницу для getopt_long():

int
 getopt_long(int argc, char * const *argv, const char *optstring,
     const struct option *longopts, int *longindex);

Пара argc и argv показывает один из способов сказать, сколько записей в массиве (по явному количеству, хотя, начиная с argv[argc] == 0, там также находится страж). optstring обозначает короткие аргументы; longindex является выходным параметром. Это оставляет только указатель longopts, что означает, что функция должна быть в состоянии сказать, сколько записей в массиве без какого-либо вспомогательного счетчика (аргумент longoptcount отсутствует), поэтому конец массива отмечен всеми значениями ноль - дозорное значение.

3 голосов
/ 16 декабря 2010

Это «страж», поэтому код, обрабатывающий массив, знает, когда он будет достигнут.

...