全部,
我想the number of passed parameters
在 va_list 中进行控制。
va_list args;
va_start(args, fmts);
vfprintf(stdout, fmts, args);
va_end(args);
有没有可能在 a 之后获得参数的数量va_start
?
全部,
我想the number of passed parameters
在 va_list 中进行控制。
va_list args;
va_start(args, fmts);
vfprintf(stdout, fmts, args);
va_end(args);
有没有可能在 a 之后获得参数的数量va_start
?
不完全是你想要的,但你可以使用这个宏来计算参数
#include <stdio.h>
#include <stdarg.h>
#define NARGS_SEQ(_1,_2,_3,_4,_5,_6,_7,_8,_9,N,...) N
#define NARGS(...) NARGS_SEQ(__VA_ARGS__, 9, 8, 7, 6, 5, 4, 3, 2, 1)
#define fn(...) fn(NARGS(__VA_ARGS__) - 1, __VA_ARGS__)
static void (fn)(int n, const char *fmt, ...)
{
va_list args;
va_start(args, fmt);
printf("%d params received\n", n);
vprintf(fmt, args);
va_end(args);
}
int main(void)
{
fn("%s %d %f\n", "Hello", 7, 5.1);
return 0;
}
你不能直接计算它们。
例如printf
一个变量计数函数,它使用它的第一个参数来计算以下参数:
printf("%s %i %d", ...);
函数printf
首先解析它的第一个参数 ( "%s %i %d"
),然后估计还有 3 个参数。
在您的情况下,您必须解析fmts
ans extract %
-specifiers 然后估计其他参数。实际上,每个都%[flags][width][.precision][length]specifier
可以算作一个论点。阅读更多...