書名: 零基礎學C語言(第4版)作者名: 康莉 李寬本章字數: 1020字更新時間: 2020-06-17 18:23:10
3.3 C程序必須有的main函數
先看下面的代碼段,這段代碼是從代碼3-1中截取出來的。為了學習方便,去掉了程序代碼中的頭文件注釋部分。
01 void main(void) 02 { 03 printf("\nHello World!"); 04 getchar(); /*防止屏幕一閃而過*/ 05 }
【代碼解析】void main(void){…}這一段是定義C程序的主函數。函數是可以完成一定功能的子程序。main函數是C語言程序的起始執行點,每一個C程序必須有且僅有一個main函數。
請讀者思考一個問題:操作系統是如何開始運行、調用一個程序的?也就是說操作系統怎么知道一個程序的入口點在哪里?所謂入口點,就是程序的第一條指令。操作系統調入程序二進制代碼到內存后,從哪條指令開始運行程序呢?
一種辦法是從文件第一行開始,一行一行往下執行,直到文件結束。很多語言就是采用這種方式,比如QBASIC語言。這種方法的好處顯而易見,人類是怎么閱讀的,計算機就是怎么執行的。但是缺點也很多,當有兩個源文件的時候,從哪個文件開始呢?
另一種辦法是和運行程序的啟動者協商一個規定的入口名稱,從這個名稱開始進入。這種方法就是C語言采用的方法。
main函數就是C程序的入口點。無論整個工程有多少個C源文件,必須編寫且只能編寫一個main函數。程序就是從main的第一條語句開始執行,然后在main函數中順序執行其他語句,在這些語句中,調用其他函數,從而使整個程序運行起來。main函數結束了,整個程序也就結束了。由此可見,寫C程序,就是寫main函數。
簡單地說明一下定義函數的語法。對函數的詳細講解請參考后續章節。
對于C語言,定義函數的語法規則如下:
返回值類型 函數名稱( 參數1,參數2…) { 函數體 }
對比上面的語法規則可以看出,在void main(void)這一行中,第一個void是指main函數的返回值數據類型,void表示main函數僅僅完成某些功能,不向調用者返回數值。main是函數名稱。函數可以是C語言系統提供的系統函數,也可以是用戶自己編寫的函數。用戶自己編寫的函數,函數名字可以自行決定。main后面是小括號對“()”,括號里是傳遞給函數的參數。類似代數里的函數y=f(x)一樣,其中x就是參數,f是函數名稱。參數可以沒有,可以是一個,也可以是多個。每個參數都有一個數據類型。本例中的參數的數據類型是void,表示main函數不需要參數。小括號后面緊接著的是大括號對“{}”,大括號對里的代碼就是main函數實現的功能,被稱作函數體。對于在函數體里能做哪些事情也是有規定的。會在函數一章里詳細說明。
留給讀者以下3個試驗:
(1)編寫一個空的main函數。
(2)修改main函數的名稱。
(3)編寫兩個main函數。
請分別在計算機上編譯、連接、運行、編輯這3個試驗,并觀察發生的現象。