C語言是有史以來使用最廣泛的程式語言,大部份的電腦硬體及作業系統都有C編譯器。又因C語言一直有隨時更新的標準,照著標準寫出的C言語程式只要經過微小的修改,就能夠跨平台使用。不需修改即可跨平台是JAVA等新語言所標榜特性。
它由 Dennies Ritchie 在1969到1973年間,任職美國AT&T Bell Labs. (美國電話及電報公司貝耳實驗室) 時所開發的言語。 C語言為類ALGOL( ALGOritm Languare)式語言,提供了結構化語法,較容易分割維護。由於C提供了與電腦機械語言對應性非常高的指令,其應用也擴展到了原本使用組合語言撰寫的領域,最出名的是系統軟體如Unix 電腦操作系統(Computor Operation System, OS)。Unix是最廣用的OS,Linux以及Android都是以Unix為籃本發展出OS。而機器用的控制器,如溫度控制器,馬達驅動器,電子錶等等,原本都使用組語,而目前則有許多轉用C語言。
在C的正式標準訂定之前,C使用者都會參考 Dennis Ritchie 及 Brian Kernighan 所著的C語言書本來撰寫程式,這些版本的程式被稱做是"K&R" C。 1989 年美國國家標準局 American National Standards Institute 發表了 C 語言標準(一般稱為 "ANSI C" 或 "C89")。翌年這套規格通過了國際標準組織 International Organization for Standardization ISO認證正式成為國際標準 (一般通稱為 "C90"). ISO 後來又在1995發表了擴展了這個標準國際化支援,1999又做了一些改版, (稱做 "C99")。目前最新版本為 "C11"是在2011年12月通過認證。
許多後期發展出來的語言都直接或間接脫胎自C語言,包括 C#, D, Go, Rust, Java, JavaScript, Limbo, LPC, Objective-C, Perl, PHP, Python, Verilog (硬體描述言言,hardware description language)[3] 及 Unix 的 C shell。 除了Python 以外,所有這些語言,在語法上都受到C語言無孔不入的巨大影響, 他們都傾向結合已經廣為人知的C語言語法表達方式與他們特異的型態,資料,以及分段方式。C++ 及物件導向C (Objective-C) 剛開始時是做為C語言的前處理器; C++ 目前則已發展成近乎是C的擴展版, 而物件C 則擺明就是C的擴展版。萬仗高樓從地起,且本課程時間有限,足夠學熟的內容仍只有學習基本的C語言部份常用指令,學完本課程的同學請不要隨意誇口自己所學的是C++或 Objective-C,以免除被真正懂物件導向C的高手問倒時的尷尬。懂多少講多少是做學問最基本的原則。
C程式架構
C語言程式的架構是由被稱為是函式(function)的構建方塊(building block)所組成。撰寫C語言程式的步驟是先撰寫函式,然後再將函式組合成程式。函式組合的方式是透過上層呼叫下層以及下層結束再到上層的方式來互動。其中最上層,最早開始上班,最晚下班的函式,是一個名叫main()的主函式。為了讓C編譯器能夠認得,主函式的名稱唯一而且永遠不變。
做為構建方塊,每一個函式,會有一個名稱以備讓其它函式呼叫,可能會有輸入參數,以備接收呼叫函式提供的輸入資料或輸出入記憶體位置,可能有回傳值,以備在結束執行回到呼叫它的函式時,順帶傳送執行狀況訊息給呼叫它的函式。函式的標準原型如下
return_type function_name(parameter list)
{
body of the function
}
其中為return_type回傳值的資料型態(詳見後面Data Type),function_name 為函式名稱,parameter list 為在呼叫這個函式時必需要先準備的輸入參數列表。大括號{...} 所包涵的各行則為函式的主體,會由多行C指令共同組成。後面會有更具體的範例。