以下两个可变参数函数定义有什么区别?
int f()
{
/* function definition */
}
int f(...)
{
/* function definition */
}
f()
实际上被定义为可变参数函数。我还假设<stdarg.h>
可以包含和使用。
函数声明中的空参数列表表示函数采用未指定数量的参数(这与可变数量的参数不同(。 函数定义中的空参数列表(例如在f
的第一个定义中(表示该函数不带任何参数。 这是一种过时的样式,不应使用 - 要指示函数不带参数,请使用void
作为标识符列表。
从 C89 开始,可变参数函数声明符必须至少有一个固定参数,后跟...
。 因此,f
的第二个定义也行不通。
int f( void ) // f takes no arguments
{
// do something
}
int f( T fixed, ... ) // one fixed parameter of some type, additional parameters as needed
{
// do something
}
printf
是标准库中可变参数函数的一个很好的例子 - 它的原型是
int printf( const char *fmt, ... );