2

我目前正在尝试制作一个执行不同职责的小型应用程序。现在我有一个控制台应用程序弹出并询问我想做什么,但有时我宁愿用 MyApp.exe -printdocuments 之类的东西启动它。

是否有任何教程可以向我展示一个简单的示例?

4

5 回答 5

8

在 C++ 中,您的main()函数可以有argcargv参数,其中包含在命令行上传递的参数。argc是参数的计数(包括可执行文件名称本身),并且是argv指向长度为 null 的字符串的指针数组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++ 教程都可能有更多关于此的信息。

于 2008-12-25T05:49:24.980 回答
5

您可以使用 boost::program_options 来执行此操作,如果您不想使用 boost 库,则必须自己解析主函数参数。

于 2008-12-25T05:51:51.247 回答
2

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;
}
于 2008-12-25T07:25:46.533 回答
1

你最好为此使用一个库。这里有一些链接可以帮助您开始使用 c++ 进行命令行参数。

  1. gperf
于 2008-12-25T05:51:44.290 回答
0

您的入口点方法,即在 C++ 中,您的主要方法需要看起来像

int main ( int argc, char *argv[] );

你可以阅读这篇文章并完成你想要做的事情

于 2008-12-25T05:51:23.540 回答