- 基于ARM的小功率電動汽車控制器開發
- 高志剛編著
- 1058字
- 2021-03-10 14:17:45
3.2 C語言的main( )函數
C語言程序總是從main( )函數開始執行的。main( )函數屬于一種特殊的函數,整個C語言編寫的程序可以看作若干函數的集合。
利用函數可以方便地對C語言程序代碼進行封裝和擴充。函數的本質是 C語言中的一種代碼塊,各函數之間相互獨立,而又可以進行互相調用,各函數都應符合圖3-2中所示的形式。

圖3-2 C語言函數格式及示例
圖3-2為C語言函數的格式,可以看出函數名稱的前面為該函數的返回值類型,后面為參數列表。參數列表由一對小括號包含,可以為空。函數的主體實現由一對大括號包括,整個函數的結構很簡潔。
圖3-2還給出了一個簡單的函數舉例,該函數的名稱為main,沒有參數列表,返回值類型為int型。
一個 C語言程序必須有一個名稱為 main的函數。圖3-3給出了一個 main( )函數經過編譯后的代碼以及運行原理示意圖。

圖3-3 C語言程序入口位置示意圖
在圖3-3中所示的代碼中,介于“/*”和“*/”之間的部分是程序的注釋,也就是方便編程人員理解程序使用的。在編譯鏈接環節,注釋是不會被解釋成二進制代碼的,因此注釋不具有任何可執行性。圖3-3所示的程序可以正常編譯和運行,但是沒有任何運行結果,這是因為程序中沒有任何程序代碼。
作為對比,圖3-4中給出了在Keil μVision中編寫的一個僅含有main( )函數的C語言程序。程序將從第3行的main( )函數開始執行。第4行和第12行的一對大括號之間的語句為main( )函數的內容。

圖3-4 在Keil μVision中編寫C語言程序
圖3-4中給出的示例中,第1條語句設置編譯時使用的頭文件。第3條語句為main( )函數的入口,程序將從此處開始運行。第4條語句的大括號為main( )函數內容的開始。第5條語句執行函數SystemInit,該函數在包含的頭文件中有聲明。
程序第7條語句為永久循環語句。第8條語句和第11條語句的一對大括號構成了一個循環語句塊。具體來說,當第7條語句中的表達式成立的時候,將會執行循環語句塊里的內容。執行完畢則重新判斷第7條語句中的表達式是否成立,若成立則會再次執行循環語句塊里的內容。當第7條語句中的表達式不成立時,則會執行第11條語句的下一條語句。
C語言中判斷表達式成立與否是通過將表達式求值后進行的,若求值后的數值為1,則表示表達式成立,否則表示表達式不成立。而圖3-4中,第7條語句“while(1)”中括號內的數值為1,即恒成立。因此第8條語句的“{”和第11條語句的“}”構成了一個語句塊里的代碼會永遠循環執行。
由于采用C語言編寫的代碼和經過編譯、鏈接后形成的二進制代碼在邏輯上是相同的,所以今后對C語言程序的解釋亦即對相應的可執行代碼的解釋。本書會以變量、關鍵詞、函數為主題,對C語言編程的相關知識進行介紹。