考慮到main函數(shù)的特殊性,lz不明白這個(gè)問題可以理解。
創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、臺(tái)前網(wǎng)絡(luò)推廣、微信小程序、臺(tái)前網(wǎng)絡(luò)營銷、臺(tái)前企業(yè)策劃、臺(tái)前品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供臺(tái)前建站搭建服務(wù),24小時(shí)服務(wù)熱線:18980820575,官方網(wǎng)址:www.cdcxhl.com
main()是省略了返回值類型,C語言會(huì)默認(rèn)認(rèn)為成main的類型為int,在main()的函數(shù)體內(nèi)要返回一個(gè)值,如return 0;
而void main()的返回值是void類型,也就是說沒有返回值。這樣在main()的函數(shù)體內(nèi)你就不用寫return 0;或者return 1;之類的返回語句。
在一個(gè)程序中,可以說你看不出兩者的差別,因?yàn)閙ain()是C語言的入口點(diǎn),入口點(diǎn)如果返回了程序也就結(jié)束了,因此C語言的這個(gè)特性似乎沒用??蓻]用的話,C語言的設(shè)計(jì)者為什么要這么做呢?!肯定有用。
沒錯(cuò),前面我說的是在一個(gè)程序中,它似乎沒用??扇绻粋€(gè)程序prog2調(diào)用另一個(gè)程序prog1的話(這里指的是prog2直接調(diào)用prog1編譯好的可執(zhí)行文件),那么這個(gè)特性就有用了。因?yàn)閜rog2要知道prog1運(yùn)行之后的狀態(tài)。比如你用C寫了一個(gè)刪除文件的程序(暫且命名為delf),然后用另一個(gè)程序去調(diào)用delf,那么調(diào)用結(jié)果怎么樣???這個(gè)文件是否刪掉了?這是int main()就會(huì)派上用場(chǎng)了。C語言中默認(rèn)的main如果返回為0,那么這個(gè)程序調(diào)用就成功了,其他值,則為不同的錯(cuò)誤代碼。在你的delf程序中,如果那個(gè)文件刪除成功,那么就在int main()中返回0,其他調(diào)用delf的程序就知道,噢,這個(gè)操作成功了。
在unix/linux系統(tǒng)中的很多命令都是通過這種方式獲得運(yùn)行結(jié)果的。
關(guān)于譚浩強(qiáng)的書,我想不用多說,發(fā)行量說明了一切。畢竟第二版在編寫的時(shí)候還比較早,而第三版根據(jù)很多現(xiàn)在的需要進(jìn)行了改寫,內(nèi)容當(dāng)然會(huì)好些。鑒于lz是初學(xué)C,其實(shí)大可不必在這個(gè)問題上浪費(fèi)太多時(shí)間,當(dāng)你有了更多的項(xiàng)目經(jīng)驗(yàn),對(duì)這個(gè)問題會(huì)有更深刻的理解。
上面我已經(jīng)給出了main()、int main()和void main()的區(qū)別,但建議lz忽略這個(gè)差別,認(rèn)為成二者一樣,先把C的其他部分學(xué)好。至于只寫成main(),我并不推薦,就算編譯器通過了,這種編程的風(fēng)格也太不嚴(yán)謹(jǐn),不利于好的習(xí)慣的養(yǎng)成。
解釋如下:
1、int main()是C語言main函數(shù)的一種聲明方式;
2、int表示函數(shù)的返回值類型,表示該主函數(shù)的返回值是一個(gè)int類型的值;
3、main表示主函數(shù),是C語言約定的程序執(zhí)行入口,其標(biāo)準(zhǔn)的定義格式為int main(int argc, char *argv[]);在int main()中,()中沒有數(shù)值表示入?yún)榭?,等同于int main(void);
4、事例中printf("%f",a);表示將a的值作為浮點(diǎn)類型打印出來,在屏幕上顯示,而主函數(shù)的返回類型int會(huì)將返回的值回傳給主調(diào)進(jìn)程,而不是在屏幕輸出。
5、因此,printf的輸出類型跟主函數(shù)的返回類型沒有關(guān)系,互不關(guān)聯(lián)。事例中,return 0 對(duì)應(yīng)才是主函數(shù)的返回值類型。
拓展資料
在C語言當(dāng)中,一個(gè)程序,無論復(fù)雜或簡單,總體上都是一個(gè)“函數(shù)”;這個(gè)函數(shù)就稱為“main() 函數(shù)”,也就是“主函數(shù)”。比如有個(gè)“做菜”程序,那么“ 做菜 ”這個(gè)過程就是“主函數(shù)”。在主函數(shù)中,根據(jù)情況,你可能還需要調(diào)用“買菜,切菜,炒菜”等子函數(shù)。
main函數(shù)在程序中大多數(shù)是必須存在的,但是依然有例外情況,比如windows編程中可以編寫一個(gè)動(dòng)態(tài)鏈接庫(dll)模塊,這是其他windows程序可以使用的代碼。由于DLL模塊不是獨(dú)立的程序,因此不需要main函數(shù)。再比如,用于專業(yè)環(huán)境的程序-----如機(jī)器人中的控制芯片--可能不需要main函數(shù)。
參考資料:百度百科:main函數(shù)
//?C語言由bell實(shí)驗(yàn)室創(chuàng)立,但后續(xù)分支太多
//?所以ISO(國際標(biāo)準(zhǔn)化組織)制定了統(tǒng)一標(biāo)準(zhǔn)
//?目前通過的標(biāo)準(zhǔn)主要有3個(gè)?C89?C99?C11
ASNSI?X3.159-1989????????????對(duì)應(yīng)C89由ASNSI制定
ISO/IEC?9899:1990????????????還是C89,只是ISO從ASNSI那里“抄襲”過來,又稱C90
ISO/IEC?9899/AMD1:1995???????對(duì)于C89的補(bǔ)充,又稱C95
ISO/IEC?9899:1999????????????C99標(biāo)準(zhǔn)
ISO/IEC?9899:2011????????????C11標(biāo)準(zhǔn)
//關(guān)于main函數(shù)的標(biāo)準(zhǔn)在C89和C99又有差異
類型一,不指明返回類型
main?(){return?0;}
//這在C89中是合法的,因?yàn)椴恢该鞣祷仡愋推鋵?shí)是隱含的告訴編譯器,這個(gè)函數(shù)返回類型是int
//這在C99中是非法的,因?yàn)镃99要求顯式聲明所有函數(shù)
類型二,不書寫return?...;在main函數(shù)中
int?main(void){}
//?C89,?函數(shù)返回值未定義
//?C99,?當(dāng)main函數(shù)返回類型為int,?且沒有寫return語句時(shí),默認(rèn)返回0
//?C99,?其他情況下,返回值未定義
類型三,定以返回值為非int
void?main(void)?{return;}
//?C89,?非法(不bb,?就是非法)
//?C99,?允許main函數(shù)返回類型由實(shí)現(xiàn)定義,支持void以及其他類型返回值
//?所以你的編譯環(huán)境,不支持C99標(biāo)準(zhǔn)
//?而你的書,比較“新”
//?建議書寫標(biāo)準(zhǔn)宏編譯
#if?__STDC_VERSION__??199901L????????//?標(biāo)準(zhǔn)支持C99
void?main(void)
#elif?defined?__STDC__????????????????//?支持標(biāo)準(zhǔn)C(89/99)
int?main(void)
#else?????????????????????????????????//?如果都不支持,我也很難受
#error?Standard?C?not?support
#endif
main(),在c語言中稱之為“主函數(shù)”,一個(gè)c程序有且僅有一個(gè)main函數(shù),任何一個(gè)c程序總是從main函數(shù)開始執(zhí)行,main函數(shù)后面的一對(duì)圓括號(hào)不能省略。
具體形式如下:
main()
{ ? }
被大括號(hào){ }括起來的內(nèi)容稱為main函數(shù)的函數(shù)體,這部分內(nèi)容就是計(jì)算機(jī)要執(zhí)行的內(nèi)容。
在{ ?}里面每一句話后面都有一個(gè)分號(hào)(;),在c語言中,我們把以一個(gè)分號(hào)結(jié)尾的一句話叫做一個(gè)c語言的語句,分號(hào)是語句結(jié)束的標(biāo)志。
擴(kuò)展資料:
函數(shù)是一組一起執(zhí)行一個(gè)任務(wù)的語句。每個(gè) C 程序都至少有一個(gè)函數(shù),即主函數(shù)?main()?,所有簡單的程序都可以定義其他額外的函數(shù)。
您可以把代碼劃分到不同的函數(shù)中。如何劃分代碼到不同的函數(shù)中是由您來決定的,但在邏輯上,劃分通常是根據(jù)每個(gè)函數(shù)執(zhí)行一個(gè)特定的任務(wù)來進(jìn)行的。
函數(shù)聲明告訴編譯器函數(shù)的名稱、返回類型和參數(shù)。函數(shù)定義提供了函數(shù)的實(shí)際主體。
C 標(biāo)準(zhǔn)庫提供了大量的程序可以調(diào)用的內(nèi)置函數(shù)。例如,函數(shù)?strcat()?用來連接兩個(gè)字符串,函數(shù)?memcpy()?用來復(fù)制內(nèi)存到另一個(gè)位置。
函數(shù)還有很多叫法,比如方法、子例程或程序,等等。
參考資料來源:百度百科-C語言函數(shù)
C語言中main函數(shù)可以在任意位置。?
每一個(gè)C語言程序有且只有一個(gè)主函數(shù)(main()),且程序必須從main()函數(shù)開始,它是程序開始時(shí)調(diào)用的第一個(gè)函數(shù)。函數(shù)定義形式:【int main(void){}】。
C語言規(guī)定,在一個(gè)C程序中,main()函數(shù)可以在任意位置。
解析:
每個(gè)C程序有且只有一個(gè)主函數(shù)(main),且程序必須從main()函數(shù)開始執(zhí)行,而且main()函數(shù)可以放在程序中的任意位置。
詳細(xì)介紹:
在宿主環(huán)境中編譯的C程序必須定義一個(gè)名為main的函數(shù),這是程序開始時(shí)調(diào)用的第一個(gè)函數(shù)。
main()函數(shù)的定義有以下兩種形式:
(1)函數(shù)沒有參數(shù),返回值為int類型。int main( void ) { /*…*/ }.
(2)函數(shù)有兩個(gè)參數(shù),類型分別是int和char**,返回值是int類型。int main( int argc, char *argv ) { /*…*/ }.
這兩種定義方式都符合C語言標(biāo)準(zhǔn)。除此之外,許多C的實(shí)現(xiàn)版本還支持第三種、非標(biāo)準(zhǔn)語法的定義方式:int main( int argc, char *argv, char *envp ) { /*…*/ }.
函數(shù)返回值是int,有3個(gè)參數(shù):第一個(gè)是int,另外兩個(gè)是char**。
類型標(biāo)示符 函數(shù)名()
{
函數(shù)體
} 類型標(biāo)示符 函數(shù)名 (形式參數(shù)列表)
{
函數(shù)體
} 它的形式為
類型說明符 函數(shù)名()
{ }
例如:
dummy(){} 在老版本c語言中,對(duì)形參類型的聲明是放在函數(shù)定義的第二行,也就是不在第一行的括號(hào)內(nèi)指定形參的類型,而在括號(hào)外單獨(dú)指定,例如上面定義的max函數(shù)可以寫成一下形式: int?max(x,y)/*整數(shù)類型max函數(shù);并指定形式參數(shù)x,y*/int?x,y;/*整數(shù)類型x,y;形式參數(shù)xy是整數(shù)類型*/{int?z;/*整數(shù)類型z*/z=xy?x:y;return(z);}