C89 会对没有声明的函数自动添加一个隐式声明:extern int foo();。这时,如果被调函数与这个声明兼容,那么就不用提前声明。(因为同样的原因,很多库函数的调用也可以不用 #include 相应的头就直接使用)C99 已经已经不会进行这个隐式声明了。所以,如果被调函数定义在主调函数之后,是需要提前声明的。但是为了兼容性,很多编译器还是会默认支持隐式声明,但是通常会给一个 warning 。
C89 会对没有声明的函数自动添加一个隐式声明:
extern int foo();
。这时,如果被调函数与这个声明兼容,那么就不用提前声明。(因为同样的原因,很多库函数的调用也可以不用#include
相应的头就直接使用)C99 已经已经不会进行这个隐式声明了。所以,如果被调函数定义在主调函数之后,是需要提前声明的。但是为了兼容性,很多编译器还是会默认支持隐式声明,但是通常会给一个 warning 。