亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如下,如果把long f2(int)去掉是錯誤的這是為什么?

如下,如果把long f2(int)去掉是錯誤的這是為什么?

夢里花落0921 2022-04-21 17:15:16
書上寫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的基礎理論

查看完整回答
反對 回復 2022-04-24
?
Smart貓小萌

TA貢獻1911條經驗 獲得超7個贊

可能和編譯器有關,我用VC++6.0這段代碼沒有問題.可以直接編譯運行.

查看完整回答
反對 回復 2022-04-24
?
SMILET

TA貢獻1796條經驗 獲得超4個贊

這同你的編譯器有關。
我用 MS VC++ 編譯器, 用 cl 命令編譯鏈接, 把你的代碼去掉long f2(int), 編譯后執行正確無誤。

你可以把
f1(int p) { 。。。}

f2(int q) {。。。}
次序對調一下,這時省去原型聲明long f2(int),也許就可以了。
因為f1要用到f2,先聲明f2,后聲明f1. 你的編譯器較笨。書上是對的。




查看完整回答
反對 回復 2022-04-24
  • 3 回答
  • 0 關注
  • 250 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號