【发布时间】:2011-11-27 13:02:18
【问题描述】:
考虑以下代码:
#include<stdio.h>
int f()
{
printf(" hey ");
return 5;
}
int main()
{
printf("hello there %d",f(4,5));
f(4,5);
return 0;
}
我预计函数“int f()”的参数太多,但即使在严格的 C99 编译中它也会给出输出。为什么this 的行为? 但似乎 C++ 编译器会出错。
【问题讨论】:
-
如果
f的定义与调用它的函数在同一个文件中,那么好的编译器会发出警告。但是,如果只看到声明,代码就是合法的。 -
一个不错的编译器??标准的 gcc 没有抛出任何错误?
-
@Lindydancer:代码是合法的。
int f()声明 f 接受你喜欢的任何参数。 -
@JeremyP: 6.5.2.2.6: “如果表示被调用函数的表达式的类型不包含原型 [...]。如果参数的数量不等于参数数量,行为未定义。”在这种情况下,编译器在编译
main时看到f的定义,可以断定存在不匹配并发出警告。