以下两个可变参数函数定义有什么区别?
int f()
{
/* function definition */
}
int f(...)
{
/* function definition */
}
f()
实际上被定义为可变参数函数。我还假设可以包含和使用<stdarg.h>
。
答案 0 :(得分:5)
函数声明中的空参数列表表示该函数采用了未指定数量的参数(与变量参数的数量不同)。函数 definition 中的空参数列表(例如在f
的第一个定义中)表示该函数采用 no 参数。这是一种过时的样式,不应该使用 - 表示函数不带参数,使用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, ... );