所以我最近在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中也是如此吗?任何人都可以深入了解这个“功能”的用例吗?
答案 0 :(得分:1)
本身并不是真正的“功能”。它只是语言在开始时回归的方式,因此语法一直存在以保持旧代码的工作。例如,添加void
使得可以使用显式不带参数的函数。
使用...
表示可变参数函数,但它与仅采用任意数量参数的函数略有不同。使用...
需要使用stdarg.h
宏,但只是使用()
声明的函数不会。