C中的可变参数函数f()与f(...)



以下两个可变参数函数定义有什么区别?

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, ... );

相关内容

  • 没有找到相关文章

最新更新