如下,如果把long f2(int)去掉是错误的这是为什么?

书上写C语言又规定在以下几种情况时可以省去主调函数中对被调函数的函数声明:
1.如果被调函数的返回值是整型或字符型时,可以不对被调函数作说明,而直接调用,这时系统将自动对被调函数返回值按整型处理.

书上是这样写的但是如果函数是long的时候仍需声明函数,难道long不算整型吗?比如这个:
#include "stdio.h"
long f1(int p)
{
int k;
long r;
long f2(int);
r=f2(p);
return r*r;
}
long f2(int q)
{long c=1;
int i;
for(i=1;i<=q;i++)
c=c*i;
return c;
}
main()
{int i;
long s=0;
for(i=1;i<=5;i++)
s=s+f1(i);
printf("\ns=%ld\n",s);
}

梦里花落0921
浏览 210回答 3
3回答

忽然笑

第一,如果你没有看错就是你的书错了,只有int和char类型的函数不必声明第二,C中可以不声明函数的条件是3个1就是上面我说的2.是被调函数定义在主调函数之前,可不必声明3函数的外部已声明过了,个个主调函数中不必声明对于第二点,很好解释,因为声明的目的在于告诉编译器有这么个自定义函数,返回类型是什么,如果被调函数定义在主调函数之前,那么编译器自然就知道了这个函数你把f2和f1换下位置并去掉声明就明白了再说一句,写函数声明是编写程序的良好习惯请注意这是C程序,C官方声明标准编译器是Turboc 2。0不要把C++的概念强加给C我不是说VC++6不好,而是说既然是在学C,就要用标准的C编译器,只有标准C编译器才能正确的学习C的基础理论

Smart猫小萌

可能和编译器有关,我用VC++6.0这段代码没有问题.可以直接编译运行.

SMILET

这同你的编译器有关。我用 MS VC++ 编译器, 用 cl 命令编译链接, 把你的代码去掉long f2(int), 编译后执行正确无误。你可以把f1(int p) { 。。。}和f2(int q) {。。。}次序对调一下,这时省去原型声明long f2(int),也许就可以了。因为f1要用到f2,先声明f2,后声明f1. 你的编译器较笨。书上是对的。
打开App,查看更多内容
随时随地看视频慕课网APP