只知道C語(yǔ)言必須要有一個(gè)且只能有一個(gè)而且名字還固定的main,But why ? 如果不了解它,就得多背誦一些莫名其妙的枯燥的規(guī)矩了?,F(xiàn)在我試圖用自己的理解來(lái)解釋一下,供參考。
10年積累的網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有西區(qū)免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
這就得從幾方面來(lái)認(rèn)識(shí);
首先得從函數(shù)產(chǎn)生的來(lái)源說(shuō)起。
在開(kāi)發(fā)程序中為了不讓代碼重復(fù)(否則修改起來(lái)會(huì)要多處去修改,勞民傷財(cái))。因此就想到了把公共的東西提取出來(lái),借助數(shù)學(xué)函數(shù)的概念,封裝出函數(shù):可以有輸入,可以有產(chǎn)出,中間是處理過(guò)程。
因此,函數(shù)的代名詞也叫過(guò)程,那么由此可以推出:面向過(guò)程編程思想其實(shí)也就是面向函數(shù)編程思想,也就意味著你要封裝出一個(gè)個(gè)的函數(shù),然后一個(gè)個(gè)調(diào)用...這樣就具有可移植性,下一個(gè)項(xiàng)目用到什么功能了,把那個(gè)函數(shù)直接拷貝過(guò)去即可。因此封裝出函數(shù)一開(kāi)始只是為了簡(jiǎn)化編程,但卻衍生出更多的提高編程效率的結(jié)果:可移植性。
它的長(zhǎng)相類似:void myfunc(){}
類比一下:void main(){},可見(jiàn)它就是一個(gè)函數(shù)。那么你的編程過(guò)程,其實(shí)也就是在一個(gè)名叫main的函數(shù)體里寫東西而已。
這其實(shí)就是你編程的所有內(nèi)容:就是在寫一個(gè)main函數(shù)體...
認(rèn)識(shí)了main是個(gè)函數(shù),那么現(xiàn)在可以來(lái)看:為什么只能有一個(gè)?
你能在一個(gè)文件中寫兩個(gè)同名的函數(shù)嗎?不能,因?yàn)橛衅缌x;因此main函數(shù)只能有一個(gè)。
再來(lái)看為什么只能叫“main”,而不能叫其他,如“Main”或者“MAIN”或者其他名字。
試想一下:當(dāng)你造了一個(gè)函數(shù),你很想做的就是調(diào)用它,那么你是怎么調(diào)用的?函數(shù)名();
同理:你寫的main(){}函數(shù)也就是讓調(diào)用的,但你在什么地方調(diào)用過(guò)嗎?沒(méi)有啊,那么誰(shuí)來(lái)調(diào)用呢?操作系統(tǒng),一只看不見(jiàn)摸不著的大手。也就是說(shuō)當(dāng)你點(diǎn)“編譯且運(yùn)行”的時(shí)候,是操作系統(tǒng)來(lái)調(diào)用main函數(shù)的。然而你知道調(diào)用的時(shí)候是要寫函數(shù)名的,也就意味著操作系統(tǒng)來(lái)調(diào)用的時(shí)候要讓你寫函數(shù)名,是不是感覺(jué)麻煩呢?因此操作系統(tǒng)就做了個(gè)小規(guī)矩:只找main函數(shù),而不找其他。所以你的函數(shù)名就只能叫main。所以,你得感謝操作系統(tǒng)做的這個(gè)規(guī)矩,讓你減少了調(diào)試運(yùn)行時(shí)候的麻煩。就像在Linux上編譯的時(shí)候,為什么只能寫Makefile?因?yàn)閙ake默認(rèn)就只找這個(gè)文件一樣...
現(xiàn)在它是不是變得可愛(ài)了?對(duì),就是要它變得可愛(ài)、變得合乎常理,才能學(xué)有所成。這也就是輕松學(xué)習(xí)之道。
C語(yǔ)言為什么那么難?就是學(xué)習(xí)的時(shí)候太按它的寫書順序了,所以:要想學(xué)的輕松,不是你整日整夜的背語(yǔ)法,也不是喊口號(hào)就可以做到的,要靈活變通,要打破常規(guī)順序,要螺旋迂回,要使用多種學(xué)習(xí)方法交互,要聯(lián)想,要穿插,總之是一個(gè)綜合的教學(xué)范疇。這也是為什么一個(gè)技術(shù)頂尖高手,卻難以做到讓你學(xué)的容易?因?yàn)椋鹤黾夹g(shù)開(kāi)發(fā)和教學(xué)是兩碼事,一個(gè)可以埋頭苦干,誰(shuí)也不理解都無(wú)所謂,而且就是要你不理解,才顯得他高大上和比你高一等。后者就完全相反,就得要讓你理解的容易,就是要讓你感覺(jué)到他原來(lái)和你一樣,都是“貧苦出生的老百姓,不是什么高高在上的神仙”,要做到這一點(diǎn)就涉及了解宇宙蒼生,就得涉及更多的綜合知識(shí)范疇,是一個(gè)難度高多了的挑戰(zhàn)。但我相信我有這個(gè)天賦......
最后要學(xué)的輕松,從心態(tài)上要有感恩之心,心胸開(kāi)闊,你的潛力就會(huì)得到極大發(fā)揮。所以如果你還在比如地下室苦苦的掙扎和學(xué)習(xí),你得感謝,因?yàn)檫@種經(jīng)歷可能你這輩子也就這么一次,當(dāng)你學(xué)有所成了之后,你想回頭到這里也沒(méi)機(jī)會(huì)了,這正是培養(yǎng)你練就你的社會(huì)母校......