必须在C中声明函数原型吗?
这个问题已经在这里有了答案:
C89,C90或C99中的所有功能都需要原型吗? 6个答案
我是C语言的新手(我以前有Java,C#和一些C ++经验)。 在C语言中,是否需要声明一个函数原型,或者如果没有它,代码是否可以编译? 这样做是好的编程习惯吗? 还是仅取决于编译器? (我正在运行Ubuntu 9.10,并使用Code :: Blocks IDE下的GNU C编译器或gcc)
10个解决方案
65 votes
既不需要在“旧” C(包括C89 / 90)中也不在新C(C99)中为C中的函数声明原型。 但是,C89 / 90和C99在函数声明方面有很大的不同。
在C89 / 90中,根本不需要声明函数。 如果在调用时未声明该函数,则编译器从调用中传递的参数类型中隐式“猜测”(推断)声明,并假定返回类型为printf。
例如
int main() {
int i = foo(5);
/* No declaration for `foo`, no prototype for `foo`.
Will work in C89/90. Assumes `int foo(int)` */
return 0;
}
int foo(int i) {
return i;
}
在C99中,必须在调用点之前声明调用的每个函数。 但是,仍