当函数在C中声明之前被调用时会发生什么?

在C语言中,如果函数在声明之前被调用 编译器假定函数的返回类型为int . 例如,以下程序编译失败。

null

C

#include <stdio.h>
int main( void )
{
// Note that fun() is not declared
printf ( "%c" , fun());
return 0;
}
char fun()
{
return 'G' ;
}


如果函数 char fun() 在上面的代码中,后面定义了main()和调用语句,那么它将无法成功编译。因为编译器默认将返回类型设为“int”。在声明时,如果返回类型与int不匹配,那么编译器将给出一个错误。

以下程序编译并运行良好,因为函数是在main()之前定义的。

C

#include <stdio.h>
int fun()
{
return 10;
}
int main( void )
{
// Note the function fun() is declared
printf ( "%d" , fun());
return 0;
}


参数呢? 编译器对参数不作任何假设。因此,当函数应用于某些参数时,编译器将无法对参数类型和算术性执行编译时检查。这可能会导致问题。例如,下面的程序在GCC中编译良好,并生成垃圾值作为输出。

C

#include <stdio.h>
int main ( void )
{
printf ( "%d" , sum(10, 5));
return 0;
}
int sum ( int b, int c, int a)
{
return (a+b+c);
}


存在这样一种误解,即编译器假定输入参数也为int。如果编译器假定输入参数为int,上述程序将无法编译。 通常建议在使用函数之前声明它,这样我们在程序运行时就不会看到任何意外(请参阅 更多细节)。 资料来源: http://en.wikipedia.org/wiki/Function_prototype#Uses 如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写评论

© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享