Cのような言語(C、C ++、Objective-Cなど)では、可変個引数を直接渡すことはできません。ただし、(外部ライブラリを開発している場合、またはリバースエンジニアの作業を容易にしたい場合は)関数の非可変個引数バージョンを提供し、可変個引数バージョンをラップするだけでよいようにすることができます。を使用して、必要な数の引数を関数に渡すことができますva_list
。例:
// variadic function
void variadic_func(int nargs, ...)
{
// just wrap the non-variadic one
va_list args;
va_start(args, nargs);
non_variadic_func(nargs, args);
va_end(args);
}
// non-variadic function
void non_variadic_func(int nargs, va_list args)
{
// do what you want with `args'
}
// you can pass down varargs like this:
void outmost_caller_func(int nargs, ...)
{
// since you can't pass down the `...', you create a va_list argument list
va_list args;
va_start(args, nargs);
// and call the non-variadic version of your function, just like the wrapper
// would do (anyway, the wrapper is only for convenience...)
non_variadic_func(nargs, args);
va_end(args);
}