【发布时间】:2012-12-06 16:51:22
【问题描述】:
我刚刚遇到某人的 C 代码,我对它为什么要编译感到困惑。有两点不明白。
-
函数原型与实际函数定义相比没有参数。
-
函数定义中的参数没有类型。
#include <stdio.h>
int func();
int func(param)
{
return param;
}
int main()
{
int bla = func(10);
printf("%d", bla);
}
为什么会这样? 我已经在几个编译器中对其进行了测试,效果很好。
【问题讨论】:
-
这是 K&R C。我们在 1980 年代编写这样的代码,那时还没有完整的功能原型。
-
gcc 对于
int func()和int main()都使用-Wstrict-prototypes发出警告:x.c:3: 警告:函数声明不是原型。您也应该将main()声明为main(void)。 -
@Jens 你为什么编辑这个问题?你好像没抓住重点……
-
我只是将隐式 int 显式化了。这怎么会错过重点?我相信重点是为什么
int func();与int func(arglist) { ... }兼容。 -
@MatsPetersson 这是错误的。 C99 5.1.2.2.1 明确与您的主张相矛盾,并声明无参数版本为
int main(void)。
标签: c parameters void function-prototypes function-parameter