天天看點

輕松了解C語言的入口函數main

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

這就得從幾方面來認識;

首先得從函數産生的來源說起。

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

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

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

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

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

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

你能在一個檔案中寫兩個同名的函數嗎?不能,因為有歧義;是以main函數隻能有一個。

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

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

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

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

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

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

本文轉自 ningcaichen66 51CTO部落格,原文連結:http://blog.51cto.com/ningcaichen66/1966554,如需轉載請自行聯系原作者

繼續閱讀