0

因此,我最近在 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 中也是如此吗?任何人都可以深入了解此“功能”的用例吗?

4

1 回答 1

1

它本身并不是真正的“功能”。这只是语言最初的方式,所以语法一直存在以保持旧代码的工作。例如,添加的void函数可以显式地不带参数。

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

于 2013-08-01T15:13:20.387 回答