日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言程序main入口函数

發(fā)布時(shí)間:2023/12/2 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言程序main入口函数 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一.main()函數(shù)是什么樣的

我們先要搞清楚main()函數(shù)有哪幾種?

查閱C89/C99/C11標(biāo)準(zhǔn)文檔,里面明確固定了兩種寫法:

int main(void) { /* ... */ }

int main(int argc, char *argv[]) { /* ... */ }

除此之外,其他寫法應(yīng)該都是不規(guī)范的寫法,常見的有以下幾種

1、main()

直接的mian()并沒有返回值,沒有入?yún)ⅰ_@種寫法實(shí)際來說,部分編譯器會(huì)顯示警告,并且會(huì)返回默認(rèn)值為int。不過在C89標(biāo)準(zhǔn)中其實(shí)是可以的,由于沒有聲明返回類型,所以才會(huì)返回默認(rèn)值int。

2、void main()

初學(xué)者經(jīng)常會(huì)使用的形式,但是并不知道來源在哪。這種寫法的返回值是void,沒有參數(shù)。值得注意的是,一旦聲明是void,在程序退出后,想要獲取其退出狀態(tài)也就不可以了。

3、int main(void)

比較常見的寫法,這種寫法的形參為void,表明它在調(diào)用的時(shí)候不能傳入任何參數(shù),那么它也就不能獲取命令行參數(shù)了。

4、int main ()

和上面第3種看起來好像沒啥區(qū)別,但是還是有些許不同。main函數(shù)雖然聲明為無入?yún)?#xff0c;但調(diào)用時(shí)卻是可以傳入任何參數(shù)或不傳參數(shù)的。

5、int main(int argc,char *argv[])

int argc入?yún)槊钚袇?shù)個(gè)數(shù),char *argv[]入?yún)槊钚袇?shù)數(shù)組。這種寫法也比較常見的,主要用在需要從命令行獲取參數(shù)的功能。

6、int main(int argc,char *argv[],char *envp[])

包含三個(gè)參數(shù)的一種寫法,上面第5種的升級(jí)版,int argc是命令行參數(shù)個(gè)數(shù),char *argv[]是命令參數(shù)數(shù)組,char *envp[]是環(huán)境變量數(shù)組。雖然只比第六種多了一個(gè)參數(shù),但全局變量environ可以代替envp的作用,獲取或者設(shè)置環(huán)境變量可以使用getenv或putenv,因此也沒有必要使用該形式。這種寫法多源于編譯器的擴(kuò)展。

寫法多樣有些算是歷史遺留有些算是編譯器的擴(kuò)展,還有些不知道從哪里生出來的。為了代碼的通用可移植性,建議采用C89/C99/C11標(biāo)準(zhǔn)文檔中規(guī)定的這兩種寫法。

二.誰在調(diào)用main()函數(shù),是否必須有main()函數(shù)

1、編譯鏈接時(shí)的引導(dǎo)代碼。操作系統(tǒng)的應(yīng)用程序其實(shí)在mian執(zhí)行前也需要運(yùn)行一段引導(dǎo)代碼才可以執(zhí)行main,我們寫應(yīng)用程序的時(shí)候不需要考慮引導(dǎo)代碼。編譯鏈接時(shí)(準(zhǔn)確說是鏈接)由鏈接器中事先準(zhǔn)備好的引導(dǎo)代碼給鏈接進(jìn)去和我們寫的應(yīng)用程序一起構(gòu)成最終的可執(zhí)行程序。

2、運(yùn)行時(shí)的加載器。加載器是操作系統(tǒng)中的程序,當(dāng)我們?nèi)?zhí)行一個(gè)程序時(shí),加載器負(fù)責(zé)將這個(gè)程序加載到內(nèi)存中去執(zhí)行這個(gè)程序。

3、程序在編譯鏈接時(shí)使用鏈接器,運(yùn)行時(shí)使用加載器,這兩個(gè)東西對(duì)程序運(yùn)行原理非常重要。

上面一段解釋,相信大家已經(jīng)明白了,是否叫main()函數(shù)取決于我們編譯特別是鏈接時(shí)指定的入口函數(shù),如何調(diào)用完全由操作系統(tǒng)。很簡單的一個(gè)道理,比如我事先寫好了調(diào)用“usrapp”函數(shù),那么你在寫函數(shù)體的時(shí)候名字就必須叫usrapp,而我如果改成叫"usrapp1"的函數(shù),你在寫函數(shù)體的時(shí)候就必須寫成“usrapp1”,同樣的道理,操作系統(tǒng)在某種情況下找main函數(shù),此時(shí)你就應(yīng)該寫"main"的函數(shù)名,如果操作系統(tǒng)在其他的情況下找“WinMain”或者“WinMain2”的時(shí)候,你自然就應(yīng)該把入口函數(shù)寫成“WinMain”或者“WinMain2”了。那么這里寫成"main"不行,寫成“WinMain”卻可以,就不難理解了。

所以說必須有main函數(shù)只是針對(duì)windows操作系統(tǒng)而已,其他操作系統(tǒng)是允許我們?cè)阪溄訒r(shí),修改鏈接選項(xiàng),制定我們程序的入口函數(shù),此時(shí)入口函數(shù)就可以任由我們發(fā)揮了,只需要符合變量命名規(guī)則即可,雖然是這樣,但是在整個(gè)工程中,還是必須只能有一個(gè)入口函數(shù),只是名字換了而已。

聲明:

本文于網(wǎng)絡(luò)整理,版權(quán)歸原作者所有,如來源信息有誤或侵犯權(quán)益,請(qǐng)聯(lián)系我們刪除或授權(quán)事宜。

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的C语言程序main入口函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。