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

标签 c variadic-functions

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

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/

相关文章:

python - 如何为 python 3.0 的仅关键字参数导入 __future__?

将 unsigned char 数组复制到 uint32_t,反之亦然

windows - stdcall 可以有可变参数吗?

c++ - 带有 %s 和 std::string 的 sprintf 给出乱码

c - 为什么这么多标准 C 函数篡改参数而不是返回值?

c - 可变参数函数中的大小整数和提升

java - 重载可变参数

使用 c 编码 : warning: incompatible implicit declaration of built-in function ‘exp10’

c - fork 子进程不断被终止,状态为 0x008B

使用 argp 库完全隐藏选项