Каков наилучший способ включить сообщение «справки» в консольное приложение? - PullRequest
4 голосов
/ 26 августа 2011

Я пишу консольное приложение, которое быстро получает много аргументов командной строки и флагов.По этой причине я хочу, чтобы пользователь мог получить доступ к описанию этих флагов и тому, для чего они служат.

Есть несколько возможных решений, которые я могу придумать

  • Я мог бы написатьфайл README и просто вставьте его в тот же каталог, что и исполняемый файл.Преимущества в том, что он простой и переносимый, но недостаток в том, что кому-то легко удалить / отредактировать файл.
  • Я мог бы вставить целое сообщение в переменную внутри моей программы и распечатать его вэкран, когда пользователь вводит mycmd --help или что-то подобное.Преимущества, остаются исполняемыми и не редактируемыми, недостаток в коде, так как у меня было бы что-то подобное ниже с плавающей точкой.

    const char[] helpmsg = "Line1\n"
                           "Line2\n"
                           "...\n"
                           "LineN\n";
    
  • Я мог бы написать запись man для моей программыно это не очень переносимо, поскольку приложение будет одинаково использоваться в Windows и Linux.

Я знаю, что вопрос, вероятно, вопрос вкуса, но мне было просто любопытно, еслиесть какие-то другие решения, о которых я не думал, что люди использовали в прошлом.

В идеале разработчик (на данный момент я) мог бы легко редактировать и обновлять, но гдедругие действительно не могут связываться с этим.

Ответы [ 4 ]

8 голосов
/ 26 августа 2011

Рассмотрите возможность использования опций программы boost library.

6 голосов
/ 26 августа 2011

Чтобы напечатать сообщение справки, я обычно использую функцию для этого. Таким образом, вы можете использовать его при запуске или во время выполнения. Например:

void usage(char* progName)
{
  cout << progName << "[options]" << endl <<
      "Options:" << endl <<
      "-h | --help        Print this help" << endl <<
      "-v | --version     Print the SVN version" << endl <<
      "-V | --Version     Print the proxy version" << endl <<
      "-d | --daemonize   Run as daemon" << endl <<
      "-P | --pidfile     Path to PID file (default: " <<
        WPASUP_PROXY_DEFAULT_PID_FILE << ")" << endl <<
      "-l | --logging     Path to logging file (default: " <<
        WPASUP_PROXY_DEFAULT_LOGGING << ")" << endl <<
      "-i | --ip          The IP address of the main application (default: " <<
        WPASUP_PROXY_MAIN_APP_IP << ")" << endl <<
      "-p | --port        The port number of the main application (default: " <<
        WPASUP_PROXY_DEFAULT_MAIN_APP_PORT << ")" << endl <<
      "-w | --wpa_cli     Path to wpa_cli program (default: " <<
        WPASUP_PROXY_DEFAULT_WPA_CLI << ")" << endl;
}

Вы также можете использовать функцию printf, если предпочитаете ... Я думаю, что это обычная практика, но если у кого-то есть идея получше, я буду заинтересован!

Привет! * * 1006

1 голос
/ 26 августа 2011

Вы также можете написать README и на prog --help просто распечатать его на консоли.

0 голосов
/ 26 августа 2011

Вы можете использовать библиотеку getopt C , целью которой является точное разбор и использование нескольких опций (краткая или длинная форма).

(Осторожно, есть и программа getoptsдля использования со сценарием оболочки со схожими функциями)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...