hol*_*ety 4 c variadic-functions
我像这样使用va_list:
void foo(const char* firstArg, ...) {
va_list args;
va_start (args, firstArg);
for (const char* arg = firstArg; arg != NULL; arg = va_arg(arg, const char*)) {
// do something with arg
}
va_end(args);
}
Run Code Online (Sandbox Code Playgroud)
foo("123","234","345")
前三个参数正确传递给foo,但是"345"完成后,
arg = va_arg(arg, const char*)
Run Code Online (Sandbox Code Playgroud)
为arg设置一些其他的怪胎价值.
所以有什么问题.我使用llvm3.0作为我的编译器.
Ray*_*hen 11
C不会自动将a NULL放在...参数列表的末尾.如果要用于NULL检测参数的结尾,则必须显式传递它.某些函数(例如printf)使用较早的参数来确定它们何时到达参数的末尾.
(编辑:实际上,如果你想NULL在最后添加一个,你需要将它转换为适当的类型,以便它作为正确类型的空指针传递.)
我认为循环应该如下所示:
for (const char* arg = firstArg; arg != NULL; arg = va_arg(args, const char*))
Run Code Online (Sandbox Code Playgroud)
变化是va_arg(args, const char*)代替va_arg(arg/*<<==*/, const char*).