以下两个可变参数函数定义有什么区别?
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
是标准库中可变参数函数的一个很好的例子 - 它的原型(prototype)是
int printf( const char *fmt, ... );
关于c - C 中的可变参数函数 f() 与 f(...),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50823215/