Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 最好的方式是什么;“帮助”;控制台应用程序中的消息?_C++_C_Console_Usage Message - Fatal编程技术网

C++ 最好的方式是什么;“帮助”;控制台应用程序中的消息?

C++ 最好的方式是什么;“帮助”;控制台应用程序中的消息?,c++,c,console,usage-message,C++,C,Console,Usage Message,我正在编写一个控制台应用程序,它正在迅速获得许多命令行参数和标志。因此,我希望用户能够访问这些标志的描述以及它们的用途 我可以想出几种可能的解决办法 我可以编写一个自述文件,并将其粘贴到与可执行文件相同的目录中。优点是它简单且可移植,缺点是某人很容易删除/编辑该文件 当用户键入mycmd--help或类似内容时,我可以将整个消息粘贴在程序中的一个变量中,并将其打印到屏幕上。优点是可执行的,不可编辑,缺点是代码,因为我会有下面这样的东西四处浮动 const char[] helpmsg = "L

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

我可以想出几种可能的解决办法

  • 我可以编写一个自述文件,并将其粘贴到与可执行文件相同的目录中。优点是它简单且可移植,缺点是某人很容易删除/编辑该文件
  • 当用户键入
    mycmd--help
    或类似内容时,我可以将整个消息粘贴在程序中的一个变量中,并将其打印到屏幕上。优点是可执行的,不可编辑,缺点是代码,因为我会有下面这样的东西四处浮动

    const char[] helpmsg = "Line1\n"
                           "Line2\n"
                           "...\n"
                           "LineN\n";
    
  • 我可以为我的程序编写一个
    man
    条目,但这不是很好的移植性,因为该应用程序在Windows和Linux上的使用非常平等

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


理想情况下,开发人员(目前的我)可以很容易地编辑和保持更新,但其他人无法真正弄乱它。

考虑使用该库。

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

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;
}
void用法(char*progName)
{
cout您可以使用which目标精确地允许解析和使用多个选项(短格式或长格式)


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

您也可以编写自述文件,然后在
prog--help上打印出来。

这看起来像是我想要的。我发现您可以在预期的输入中添加选项和说明。文档中不太清楚我将如何将这些打印到屏幕上,但我认为这是可能的,否则会出现什么问题为每个选项提供说明的步骤。请参阅“入门”一节你可以把Booost::OpjyToStopy::OpthsS.Debug对象.@ Fielip EkbBoad想法,这将复制信息,这永远不是一个好东西,这总是会导致它们之间的差异。你应该问C++的问题,或者C.<代码> STD::CUT对于一个示例片段来说会更好。为什么?您使用的是
std::endl
?它会在每行之后刷新缓冲区。我会使用
\n
(没有批评,真正的问题)