在控制台应用程序中包含"help"消息的最佳方法是什么?

What is the best way to include a "help" message in a console application?

本文关键字:最佳 方法 是什么 消息 help 控制台 应用程序 包含      更新时间:2023-10-16

我正在编写一个控制台应用程序,它正在迅速获得许多命令行参数和标志。出于这个原因,我希望用户能够访问这些标志的描述以及它们的用途。

我能想到几个可能的解决办法

  • 我可以写一个README文件,并把它放在与可执行文件相同的目录中。优点是简单便携,缺点是很容易被人删除/编辑文件。
  • 我可以将整个消息粘贴到程序中的一个变量中,并在用户键入mycmd --help或类似的东西时将其打印到屏幕上。优点,保持可执行且不可编辑,缺点是在代码中,因为我将在下面浮动类似的东西。

    const char[] helpmsg = "Line1n"
                           "Line2n"
                           "...n"
                           "LineNn";
    
  • 我可以为我的程序写一个man条目,但这不是很可移植,因为应用程序将在Windows和Linux上使用。

我知道这个问题可能是一个品味问题,但我只是好奇是否有其他我没有想到的过去人们使用过的解决方案。

理想情况下,它将是一些很容易为开发人员(目前我)编辑和保持更新,但其他人不能真正打乱它。

考虑使用boost程序选项库

要打印帮助消息,我通常使用一个函数。你可以在启动或运行时使用它。例如:

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函数…我认为这是一种常见的做法,但如果有人有更好的主意,我会感兴趣的!

问候!

你也可以写一个README,在prog --help上直接打印到控制台

您可以使用getopt C库,它的目标是精确地允许解析和使用多个选项(短格式或长格式)。

(注意,还有一个getopts程序可以与具有类似功能的shell脚本一起使用)