foo()的用例是什么意思foo有一个未知数量的参数?

时间:2013-08-01 15:08:56

标签: c syntax c99 function-prototypes

所以我最近在Hacker News上阅读了一些关于函数指针的内容,并且明确了void foo()void foo(void)不等同于原型的事实。所以,我着手确保这确实是真的:

int foo()
{
  return 0;
}
int main()
{
  return foo(1,2,3,4);
}

果然,这段代码编译时甚至没有警告......因为这段代码会引发错误:

int foo(void)
{
  return 0;
}
int main()
{
  return foo(1,2,3,4);
}

这似乎非常容易出错。我还认为...代表“任意数量的论点”,例如printf的签名

int printf ( const char * format, ... );

在C89或K& R中也是如此吗?任何人都可以深入了解这个“功能”的用例吗?

1 个答案:

答案 0 :(得分:1)

本身并不是真正的“功能”。它只是语言在开始时回归的方式,因此语法一直存在以保持旧代码的工作。例如,添加void使得可以使用显式不带参数的函数。

使用...表示可变参数函数,但它与仅采用任意数量参数的函数略有不同。使用...需要使用stdarg.h宏,但只是使用()声明的函数不会。