所以我发现自己希望能够使用 va_list 迭代命令行参数,并且我相信我已经在某个地方看到过它的实现。
我尝试过谷歌搜索,但没有成功。
有谁知道如何实现这一点或知道是否可以实现?
你不能。
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
这就是我所做的:
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个公共参数,然后开始模型参数。