在控制台应用程序中包含"help"消息的最佳方法是什么?
What is the best way to include a "help" message in a console application?
我正在编写一个控制台应用程序,它正在迅速获得许多命令行参数和标志。出于这个原因,我希望用户能够访问这些标志的描述以及它们的用途。
我能想到几个可能的解决办法
- 我可以写一个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脚本一起使用)
相关文章:
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- 在C++中向零方向近似的最佳方法
- 使用不同的CRT将新的C++代码与旧的(二进制)组件隔离开来的最佳方法是什么
- 检测win32服务创建和删除的最佳方法
- 在C++中样板"冷/never_inline"错误处理技术的最佳方法是什么?
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- 将线程中的数据存储到全局容器的最佳方法?
- 将一系列整数放入类的最佳方法是什么?
- 在派生类中使用基类的私有成员变量的最佳方法
- 在 C++ 中将非指定类型作为参数传递的最佳方法?
- Qt - QVector 和模型视图 - 从列表视图获取自定义类的最佳方法是什么?
- 使用 Git 处理 C++ Visual Studio 2019 解决方案的外部依赖项源代码管理的最佳方法是什么?
- 比较两个节点坐标的最佳方法是什么?
- 在nodejs中使用本机代码的最佳方法是什么?
- 将 pybind11 绑定标记为已弃用的最佳方法
- C++:将向量传递到构造函数以创建成员变量的最佳方法?
- C++中变量混叠的最佳方法
- 读取大文件(>2GB)(文本文件包含以太网数据)并通过不同参数随机访问数据的最佳方法是什么?