书上写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);}
3 回答
忽然笑
TA贡献1806条经验 获得超5个赞
第一,如果你没有看错就是你的书错了,只有int和char类型的函数不必声明
第二,C中可以不声明函数的条件是3个
1就是上面我说的
2.是被调函数定义在主调函数之前,可不必声明
3函数的外部已声明过了,个个主调函数中不必声明
对于第二点,很好解释,因为声明的目的在于告诉编译器有这么个自定义函数,返回类型是什么,如果被调函数定义在主调函数之前,那么编译器自然就知道了这个函数
你把f2和f1换下位置并去掉声明就明白了
再说一句,写函数声明是编写程序的良好习惯
请注意这是C程序,C官方声明标准编译器是Turboc 2。0
不要把C++的概念强加给C
我不是说VC++6不好,而是说既然是在学C,就要用标准的C编译器,只有标准C编译器才能正确的学习C的基础理论
SMILET
TA贡献1796条经验 获得超4个赞
这同你的编译器有关。
我用 MS VC++ 编译器, 用 cl 命令编译链接, 把你的代码去掉long f2(int), 编译后执行正确无误。
你可以把
f1(int p) { 。。。}
和
f2(int q) {。。。}
次序对调一下,这时省去原型声明long f2(int),也许就可以了。
因为f1要用到f2,先声明f2,后声明f1. 你的编译器较笨。书上是对的。
- 3 回答
- 0 关注
- 208 浏览
添加回答
举报
0/150
提交
取消