C中的变量函数f()与f(...)

时间:2018-06-12 18:03:55

标签: c variadic-functions

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

int f()
{
    /* function definition */
}

int f(...)
{
    /* function definition */
}

f()实际上被定义为可变参数函数。我还假设可以包含和使用<stdarg.h>

1 个答案:

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