首先給大家一個簡單的例子,讓讀者有個整體的認識,代碼如下:
1#include
2int main()
3{
4puts("關注Cc吖");
5return 0;
6}
函數的概念
先來看第4行代碼,這行代碼會在顯示器上輸出“關注Cc吖”。前面我們已經講過,puts 後面要帶( ),字元串也要放在( )中。
在C語言中,有的語句使用時不能帶括号,有的語句必須帶括号。帶括号的稱為函數(Function) 。
C語言提供了很多功能,例如輸入輸出、獲得日期時間、檔案操作等,我們隻需要一句簡單的代碼就能夠使用。但是這些功能的底層都比較複雜,通常是軟體和硬體的結合,還要要考慮很多細節和邊界,如果将這些功能都交給程式員去完成,那将極大增加程式員的學習成本,降低程式設計效率。
好在C語言的開發者們為我們做了一件好事,他們已經編寫了大量代碼,将常見的基本功能都完成了,我們可以直接拿來使用。但是現在問題來了,那麼多代碼,如何從中找到自己需要的呢?一股腦将所有代碼都拿來顯然是非常不明智的。
這些代碼,早已被分門别類地放在了不同的檔案中,并且每一段代碼都有唯一的名字。使用代碼時,隻要在對應的名字後面加上( )就可以。這樣的一段代碼能夠獨立地完成某個功能,一次編寫完成後可以重複使用,被稱為函數(Function)。讀者可以認為,函數就是一段可以重複使用的代碼。
函數的一個明顯特征就是使用時必須帶括号( ),必要的話,括号中還可以包含待處理的資料。例如puts("腳本之家")就使用了一段具有輸出功能的代碼,這段代碼的名字是 puts,"腳本之家" 是要交給這段代碼處理的資料。使用函數在程式設計中有專業的稱呼,叫做函數調用(Function Call)。
如果函數需要處理多個資料,那麼它們之間使用逗号,分隔,例如:
pow(10, 2);
該函數用來求10的2次方。
需要注意的是,C語言中的函數和數學中的函數不是同一個概念,不要拿兩者對比。函數的英文名稱是 Function,它還有“功能”的意思。大陸将 Function 翻譯為“函數”,而台灣地區翻譯為“函式”,讀者要注意區分。
自定義函數和main函數
C語言自帶的函數稱為庫函數(Library Function) 。庫(Library)是程式設計中的一個基本概念,可以簡單地認為它是一些列函數的集合,在磁盤上往往是一個檔案夾。C語言自帶的庫稱為标準庫(Standard Library) ,其他公司或個人開發的庫稱為第三方庫(Third-Party Library) 。
除了庫函數,我們還可以編寫自己的函數,拓展程式的功能。自己編寫的函數稱為自定義函數。自定義函數和庫函數在編寫和使用方式上完全相同,隻是由不同的機構來編寫。
示例中第2~6行代碼就是我們自己編寫的一個函數。main 是函數的名字,( ) 表明這是函數定義,{ } 之間的代碼是函數要實作的功能。
函數可以接收待處理的資料,同樣可以将處理結果告訴我們;使用return可以告知處理結果。示例中第5行代碼表明,main 函數的處理結果是整數 0。return 可以翻譯為“傳回”,是以函數的處理結果被稱為傳回值(Return Value) 。
第2行代碼中,int 是 integer 的簡寫,意為“整數”。它告訴我們,函數的傳回值是整數。
需要注意的是,示例中的自定義函數必須命名為 main。C語言規定,一個程式必須有且隻有一個 main 函數。main 被稱為主函數,是程式的入口函數,程式運作時從 main 函數開始,直到 main 函數結束(遇到 return 或者執行到函數末尾時,函數才結束)。
也就是說,沒有 main 函數程式将不知道從哪裡開始執行,運作時會報錯。
綜上所述:第2~6行代碼定義了主函數 main,它的傳回值是整數 0,程式将從這裡開始執行。main 函數的傳回值在程式運作結束時由系統接收。
關于自定義函數的更多内容,我們将在《C語言函數》一章中詳細講解,這裡不再展開讨論。
有的教材中将 main 函數寫作:
1void main()
2{
3 // Some Code...
4}
這在 VC6.0 下能夠通過編譯,但在 C-Free、GCC 中卻會報錯,因為這不是标準的 main 函數的寫法,大家不要被誤導,最好按照示例中的格式來寫。
頭檔案的概念
還有最後一個問題,示例中第1行的#include 是什麼意思呢?
C語言開發者們編寫了很多常用函數,并分門别類的放在了不同的檔案,這些檔案就稱為頭檔案(header file) 。每個頭檔案中都包含了若幹個功能類似的函數,調用某個函數時,要引入對應的頭檔案,否則編譯器找不到函數。
實際上,頭檔案往往隻包含函數的說明,也就是告訴我們函數怎麼用,而函數本身儲存在其他檔案中,在連結時才會找到。對于初學者,可以暫時了解為頭檔案中包含了若幹函數。
引入頭檔案使用#include指令,并将檔案名放在< >中,#include 和 < > 之間可以有空格,也可以沒有。
頭檔案以.h為字尾,而C語言代碼檔案以.c為字尾,它們都是文本檔案,沒有本質上的差別,#include 指令的作用也僅僅是将頭檔案中的文本複制到目前檔案,然後和目前檔案一起編譯。你可以嘗試将頭檔案中的内容複制到目前檔案,那樣也可以不引入頭檔案。
.h中代碼的文法規則和.c中是一樣的,你也可以#include ,這是完全正确的。不過實際開發中沒有人會這樣做,這樣看起來非常不專業,也不規範。
較早的C語言标準庫包含了15個頭檔案,stdio.h 和 stdlib.h 是最常用的兩個:
stdio 是 standard input ouput 的縮寫,stdio.h 被稱為“标準輸入輸出檔案”,包含的函數大都和輸入輸出有關,puts() 就是其中之一。
stdlib 是 standard library 的縮寫,stdlib.h 被稱為“标準庫檔案”,包含的函數比較雜亂,多是一些通用工具型函數,system() 就是其中之一。
最後的總結
初學程式設計,有很多基本概念需要了解,本節就涉及到很多,建議大家把上面的内容多讀幾遍,必将有所收獲。
本節開頭的示例是一個C語言程式的基本結構,我們不妨整理一下思路,從整體上再分析一遍:
1) 第1行引入頭檔案 stdio.h,這是程式設計中最常用的一個頭檔案。頭檔案不是必須要引入的,我們用到了 puts 函數,是以才引入 stdio.h。例如下面的代碼完全正确
1int main()
2{
3 return 0;
4}
我們沒有調用任何函數,是以不必引入頭檔案。
2) 第2行開始定義主函數 main。main 是程式的入口函數,一個C程式必須有 main 函數,而且隻能有一個。
3) 第4行調用 puts 函數向顯示器輸出字元串。
4) 第5行是 main 函數的傳回值。程式運作正确一般傳回 0。
以上就是對 C語言簡單程式的分析,希望能幫到初學者。
就享到這啦,喜歡此篇文章或覺得這篇文章對你有幫助的讀者可以分享給身邊的朋友們。如果你是小白也可以私信回複“資料”領取大禮包一份,以及開發工具一份。