您當前的位置:首頁 > 書法

輕鬆理解C語言的入口函式main

作者:由 寧哥 發表于 書法時間:2017-06-09

只知道C語言必須要有一個且只能有一個而且名字還固定的main,But why ? 如果不瞭解它,就得多背誦一些莫名其妙的枯燥的規矩了。現在我試圖用自己的理解來解釋一下,供參考。

這就得從幾方面來認識;

首先得從函式產生的來源說起。

在開發程式中為了不讓程式碼重複(否則修改起來會要多處去修改,勞民傷財)。因此就想到了把公共的東西提取出來,藉助數學函式的概念,封裝出函式:可以有輸入,可以有產出,中間是處理過程。

因此,函式的代名詞也叫過程,那麼由此可以推出:面向過程程式設計思想其實也就是面向函式程式設計思想,也就意味著你要封裝出一個個的函式,然後一個個呼叫。。。這樣就具有可移植性,下一個專案用到什麼功能了,把那個函式直接複製過去即可。因此封裝出函式一開始只是為了簡化程式設計,但卻衍生出更多的提高程式設計效率的結果:可移植性。

它的長相類似:void myfunc(){}

類比一下:void main(){},可見它就是一個函式。那麼你的程式設計過程,其實也就是在一個名叫main的函式體裡寫東西而已。

這其實就是你程式設計的所有內容:就是在寫一個main函式體。。。

認識了main是個函式,那麼現在可以來看:為什麼只能有一個?

你能在一個檔案中寫兩個同名的函式嗎?不能,因為有歧義;因此main函式只能有一個。

再來看為什麼只能叫“main”,而不能叫其他,如“Main”或者“MAIN”或者其他名字。

試想一下:當你造了一個函式,你很想做的就是呼叫它,那麼你是怎麼呼叫的?函式名();

同理:你寫的main(){}函式也就是讓呼叫的,但你在什麼地方呼叫過嗎?沒有啊,那麼誰來呼叫呢?作業系統,一隻看不見摸不著的大手。也就是說當你點“編譯且執行”的時候,是作業系統來呼叫main函式的。然而你知道呼叫的時候是要寫函式名的,也就意味著作業系統來呼叫的時候要讓你寫函式名,是不是感覺麻煩呢?因此作業系統就做了個小規矩:只找main函式,而不找其他。所以你的函式名就只能叫main。所以,你得感謝作業系統做的這個規矩,讓你減少了除錯執行時候的麻煩。就像在Linux上編譯的時候,為什麼只能寫Makefile?因為make預設就只找這個檔案一樣。。。

現在它是不是變得可愛了?對,就是要它變得可愛、變得合乎常理,才能學有所成。這也就是輕鬆學習之道。

C語言為什麼那麼難?就是學習的時候太按它的寫書順序了,所以:要想學的輕鬆,不是你整日整夜的背語法,也不是喊口號就可以做到的,要靈活變通,要打破常規順序,要螺旋迂迴,要使用多種學習方法互動,要聯想,要穿插,總之是一個綜合的教學範疇。這也是為什麼一個技術頂尖高手,卻難以做到讓你學的容易?因為:做技術開發和教學是兩碼事,一個可以埋頭苦幹,誰也不理解都無所謂,而且就是要你不理解,才顯得他高大上和比你高一等。後者就完全相反,就得要讓你理解的容易,就是要讓你感覺到他原來和你一樣,都是“貧苦出生的老百姓,不是什麼高高在上的神仙”,要做到這一點就涉及瞭解宇宙蒼生,就得涉及更多的綜合知識範疇,是一個難度高多了的挑戰。但我相信我有這個天賦……

最後要學的輕鬆,從心態上要有感恩之心,心胸開闊,你的潛力就會得到極大發揮。所以如果你還在比如地下室苦苦的掙扎和學習,你得感謝,因為這種經歷可能你這輩子也就這麼一次,當你學有所成了之後,你想回頭到這裡也沒機會了,這正是培養你練就你的社會母校……