LINUX.ORG.RU

GETOPT_HELP_CHAR


0

0

Взял из coreutils файл system.h и урезал его до следующего:
ifndef CHAR_BIT
# define CHAR_BIT 8
#endif

#define TYPE_MINIMUM(t) ((t) (TYPE_SIGNED (t) \
                              ? ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1) : (t) 0))
#define TYPE_MAXIMUM(t) ((t) (~ (t) 0 - TYPE_MINIMUM (t)))

#ifndef CHAR_MIN
# define CHAR_MIN TYPE_MINIMUM (char)
#endif

#ifndef CHAR_MAX
# define CHAR_MAX TYPE_MAXIMUM (char)
#endif

enum
{
  GETOPT_HELP_CHAR = (CHAR_MIN - 2),
  GETOPT_VERSION_CHAR = (CHAR_MIN - 3)
};

#define GETOPT_HELP_OPTION_DECL \
  "help", no_argument, 0, GETOPT_HELP_CHAR
#define GETOPT_VERSION_OPTION_DECL \
  "version", no_argument, 0, GETOPT_VERSION_CHAR

#define case_GETOPT_HELP_CHAR                   \
  case GETOPT_HELP_CHAR:                        \
    usage (EXIT_SUCCESS);                       \
    break;

#define HELP_OPTION_DESCRIPTION \
  _("      --help     display this help and exit\n")
#define VERSION_OPTION_DESCRIPTION \
  _("      --version  output version information and exit\n")

#define case_GETOPT_VERSION_CHAR(Program_name, Authors)                 \
  case GETOPT_VERSION_CHAR:                                             \
    usage (EXIT_SUCCESS);                       \
    break;

Дак вот при компиляции выдаёт следующее:
system.h:41: error: parse error before "char"
system.h:41: error: enumerator value for `GETOPT_HELP_CHAR' not integer constant
system.h:41: error: parse error before ')' token
system.h:42: error: parse error before "char"
system.h:42: error: enumerator value for `GETOPT_VERSION_CHAR' not integer constant
system.h:42: error: parse error before ')' token

Я так понимаю, что help_char по идее должен быть буквой "h".
Объясните мне, пожалуйста, где ошибка и чего я недопонимаю?
★★★★★

Re: GETOPT_HELP_CHAR

Ну расскажите как ещё можно эффективнее сделать разбор ключей?

UVV ★★★★★ ()
Ответ на: Re: GETOPT_HELP_CHAR от friday

Re: GETOPT_HELP_CHAR

ОК, попробую посмотреть где-нибудь ещё, просто я брал coreutils за эталон.

UVV ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.