【发布时间】:2008-12-25 05:41:24
【问题描述】:
我目前正在尝试制作一个执行不同职责的小型应用程序。现在我有一个控制台应用程序弹出并询问我想做什么,但有时我宁愿用 MyApp.exe -printdocuments 之类的东西启动它。
是否有任何教程可以向我展示一个简单的示例?
【问题讨论】:
标签: c++ parameters
我目前正在尝试制作一个执行不同职责的小型应用程序。现在我有一个控制台应用程序弹出并询问我想做什么,但有时我宁愿用 MyApp.exe -printdocuments 之类的东西启动它。
是否有任何教程可以向我展示一个简单的示例?
【问题讨论】:
标签: c++ parameters
在 C++ 中,main() 函数可以有 argc 和 argv 参数,它们包含在命令行中传递的参数。 argc 是参数的数量(包括可执行文件名本身),argv 是指向长度为 argc 的以空字符结尾的字符串的指针数组。
例如,这个程序打印它的参数:
#include <stdio.h>
int main(int argc, char *argv[])
{
for (int i = 0; i < argc; i++) {
printf("argv[%d]: %s\n", i, argv[i]);
}
return 0;
}
任何 C 或 C++ 教程都可能有更多关于这方面的信息。
【讨论】:
你可以使用 boost::program_options 来做到这一点,如果你不想使用 boost 库,你必须自己解析 main 函数参数。
【讨论】:
getopt 是一个 posix 函数(存在用于 windows 的实现),可以帮助您解析参数:
#include <unistd.h> // getopt
// call with my_tool [-n] [-t <value>]
int main(int argc, char *argv[])
{
int opt;
int nsecs;
bool n_given = false, t_given = false;
// a colon says the preceding option takes an argument
while ((opt = ::getopt(argc, argv, "nt:")) != -1) {
switch (opt) {
case 'n':
n_given = true;
break;
case 't':
nsecs = boost::lexical_cast<int>(optarg);
t_given = true;
break;
default: /* '?' */
std::cerr << "Usage: "
<< argv[0] << " [-t <value>] [-n]\n";
return 1;
}
}
return 0;
}
【讨论】:
您最好为此使用库。这里有一些链接可以帮助您开始使用 c++ 进行命令行参数。
【讨论】:
【讨论】: