如何在 C 中使用 va_list 迭代命令行参数

问题描述 投票:0回答:3

所以我发现自己希望能够使用 va_list 迭代命令行参数,并且我相信我已经在某个地方看到过它的实现。

我尝试过谷歌搜索,但没有成功。

有谁知道如何实现这一点或知道是否可以实现?

c pointers command-line command-line-arguments
3个回答
8
投票

你不能。

va_list
适用于可变参数函数,而
main
则不适用于。然而,我想知道的是为什么你会更喜欢这个(如果可能的话):

char *arg;
va_list vl;
va_start(vl, argc);
while ((arg = va_arg(vl, char*)))
    // use arg
va_end(vl);

对此:

for (int i = 0; i < argc; ++i)
   // use argv[i]

或者这个:

for (char **arg = argv; *arg; ++arg)
   // use *arg

0
投票

这就是我所做的:

void get_model_parameters (char **argv, int argc, ...) {
    va_list _;
    va_start(_, argc);
    for (int i = 8; va_arg(_, real *); i++) {
        *va_arg(_, real *) = strtold(argv[i], NULL);
    }
    va_end(_);
}

我用它从命令尾部获取命令参数。我针对一个通用框架一次编译一个“模型”,每个模型都包含从命令参数填充的其自己的参数集。先跳过8个公共参数,然后开始模型参数。


-1
投票
© www.soinside.com 2019 - 2024. All rights reserved.