如果函數(shù)的定義是在調(diào)用之前,就不用聲明。如果先調(diào)用后定義,就要在調(diào)用之前先聲明。比如上面的例子,如果把函數(shù)max的定義部分放在main后面,那就要在調(diào)用之前聲明。

網(wǎng)站制作、網(wǎng)站設(shè)計(jì)的關(guān)注點(diǎn)不是能為您做些什么網(wǎng)站,而是怎么做網(wǎng)站,有沒(méi)有做好網(wǎng)站,給成都創(chuàng)新互聯(lián)一個(gè)展示的機(jī)會(huì)來(lái)證明自己,這并不會(huì)花費(fèi)您太多時(shí)間,或許會(huì)給您帶來(lái)新的靈感和驚喜。面向用戶(hù)友好,注重用戶(hù)體驗(yàn),一切以用戶(hù)為中心。
在C語(yǔ)言中,函數(shù)聲明只是推薦,而不是強(qiáng)制。
當(dāng)沒(méi)有函數(shù)聲明的時(shí)候,編譯器沒(méi)辦法對(duì)函數(shù)的參數(shù)個(gè)數(shù)和類(lèi)型做檢查,于是帶來(lái)風(fēng)險(xiǎn),但并不是找不到。
你看下你編譯的時(shí)候,針對(duì)沒(méi)有聲明的函數(shù),應(yīng)該會(huì)有一個(gè)warning的。代表編譯器檢查到了這個(gè)問(wèn)題,但是并不是致命的。所以只是warning, 而不是error。
有兩處錯(cuò)誤:
#include stdio.h
#include stdlib.h
long int max (int a,int b,int c)
{
int d;
if(ab)d=a;
else d=b;//第一處,兩句話(huà)順序交換,并且應(yīng)是d與c比較
if(dc)d=c;
return d;
}
void main ()
{
int a,b,c,d;//第二處,沒(méi)有定義變量
printf("請(qǐng)輸入3個(gè)數(shù)字");
scanf("%d,%d,%d",a,b,c);
d=max(a,b,c);
printf(" %d \n",d);
system("PAUSE");
return 0;
}
很明顯是函數(shù)聲明嘛,書(shū)上這樣寫(xiě)就是錯(cuò)了。
樓主有不懂可以問(wèn)哦。
第一,如果你沒(méi)有看錯(cuò)就是你的書(shū)錯(cuò)了,只有int和char類(lèi)型的函數(shù)不必聲明
第二,C中可以不聲明函數(shù)的條件是3個(gè)
1就是上面我說(shuō)的
2.是被調(diào)函數(shù)定義在主調(diào)函數(shù)之前,可不必聲明
3函數(shù)的外部已聲明過(guò)了,個(gè)個(gè)主調(diào)函數(shù)中不必聲明
對(duì)于第二點(diǎn),很好解釋?zhuān)驗(yàn)槁暶鞯哪康脑谟诟嬖V編譯器有這么個(gè)自定義函數(shù),返回類(lèi)型是什么,如果被調(diào)函數(shù)定義在主調(diào)函數(shù)之前,那么編譯器自然就知道了這個(gè)函數(shù)
你把f2和f1換下位置并去掉聲明就明白了
再說(shuō)一句,寫(xiě)函數(shù)聲明是編寫(xiě)程序的良好習(xí)慣
請(qǐng)注意這是C程序,C官方聲明標(biāo)準(zhǔn)編譯器是Turboc 2。0
不要把C++的概念強(qiáng)加給C
我不是說(shuō)VC++6不好,而是說(shuō)既然是在學(xué)C,就要用標(biāo)準(zhǔn)的C編譯器,只有標(biāo)準(zhǔn)C編譯器才能正確的學(xué)習(xí)C的基礎(chǔ)理論
這里涉及到一個(gè)路徑的問(wèn)題。我們編寫(xiě)好的程序main函數(shù)是入口,當(dāng)編譯器變異的時(shí)候會(huì)根據(jù)里面調(diào)用到的其他函數(shù)去尋找加載進(jìn)來(lái)一起編譯(非main函數(shù)如果不被main函數(shù)調(diào)用其實(shí)根本上就沒(méi)用,這里指的是不被main函數(shù)調(diào)用和main函數(shù)調(diào)用過(guò)的函數(shù)調(diào)用),假如是include進(jìn)來(lái)的編譯器就知道去庫(kù)函數(shù)里面加載那一個(gè)函數(shù),而沒(méi)有include進(jìn)來(lái)的就會(huì)在本目錄下檢索,假如檢索不到就編譯出錯(cuò)。庫(kù)函數(shù)所在就相當(dāng)于老地方,而main函數(shù)所在的地方就相當(dāng)于本地,這兩個(gè)都是被編譯器熟知的。
其實(shí)除了c語(yǔ)言,java也會(huì)這樣,不在同一個(gè)包內(nèi)的類(lèi)需要導(dǎo)入,在同一個(gè)包里面的類(lèi)不需要導(dǎo)入(import),在同一個(gè)java文件里面的類(lèi)(內(nèi)部類(lèi)或者類(lèi)外面定義的類(lèi)都一樣)也不需要導(dǎo)入。因?yàn)榫幾g器知道在這兩個(gè)地方找,去類(lèi)庫(kù)找就需要指定哪一個(gè)。
分享文章:c語(yǔ)言缺少主函數(shù)聲明,c語(yǔ)言未找到函數(shù)的定義
地址分享:http://chinadenli.net/article6/dsshcig.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、電子商務(wù)、做網(wǎng)站、品牌網(wǎng)站設(shè)計(jì)、網(wǎng)站導(dǎo)航、定制開(kāi)發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)