起源
1950晶體管計算機年代,歐美計算機學家合力所組成的聯席大會共同開發 ALGOL(ALGOrithmic Language),也稱為A語言。
1963年,劍橋大學將ALGOL 60語言發展成為CPL(Combined Programming Language)語言。
1967年,英國劍橋大學的 Dennis MacAlistair Ritchie(丹尼斯·麥卡利斯泰爾·裡奇) 對 CPL語言做了簡化,推出了 BCPL (Base Combined Programming Langurage)語言。
1970年,美國貝爾實驗室的 Brian Wilson Kernighan(布萊恩·威爾森·柯林漢) 以 BCPL 語言為基礎,又作了進一步的簡化,設計出了很簡單的而且很接近硬件的 B 語言(取BCPL的第一個字母),並用B語言寫出了第一個 UNIX 操作系統。
1972年~1973年間,貝爾實驗室的 Dennis M.Ritchie 在 B 語言的基礎上設計出了 C 語言(取BCPL的第二個字母)。
1977年,Dennis M.Ritchie 發表了不依賴於具體機器系統的C語言編譯文本《可移植的C語言編譯程序》。
1978年,Brian W.Kernighian和 Dennis M.Ritchie共同出版了名著《The C Programming Language》,被C語言開發者們稱為“K&R C”。
1989年,ANSI 發布了第一個完整的C語言標准——ANSI X3.159—1989,簡稱“C89”,不過人們也習慣稱其為“ANSI C”。
1990年,ANSI C 被國際標准組織ISO采納,命名為ISO/IEC9899: 1990,簡稱為“C90”。
1999年,在做了一些必要的修正和完善後,ISO發布了新的C語言標准,命名為ISO/IEC 9899:1999,簡稱“C99”。
2011年12月8日,ISO又正式發布了新的標准,稱為ISO/IEC9899: 2011,簡稱為“C11”。
優點
1、簡潔緊湊、靈活方便
2、運算符豐富
3、數據類型豐富
4、表達方式靈活實用
5、允許直接訪問物理地址,對硬件進行操作
6、生成目標代碼質量高,程序執行效率高
7、可移植性好
8、表達力強
缺點
1、C語言的缺點主要表現在數據的封裝性上,這一點使得C在數據的安全性上有很大缺陷,這也是C和C++的一大區別。
2、C語言的語法限制不太嚴格,對變量的類型約束不嚴格,影響程序的安全性,對數組下標越界不作檢查等。從應用的角度,C語言比其他高級語言較難掌握。也就是說,對用C語言的人,要求對程序設計更熟練一些。
C語言關鍵字
關鍵字就是已被C語言本身使用,不能作其它用途使用的字。例如關鍵字不能用作變量名、函數名等。
由ANSI標准定義的C語言關鍵字共32個: auto double int struct break else long switch case enum register typedef char extern return union const float short unsigned continue for signed void default goto sizeof volatile do if while static C99標准新增5個關鍵字: inline 內聯函數,在C++中用的多, 它是宏定義的一種優化實現方式 restrict 它只可以用於限定和約束指針,並表明指針是訪問一個數據對象的唯一且初始的方式 _Bool unsigned int 型,在C99中被定義為布爾型,只可容納0、1兩個值 _Complex 復數類類型 _Imaginary 純虛函數類型 C11標准新增1個關鍵字: _Genneric 泛型
根據關鍵字的作用,可以將關鍵字分為數據類型關鍵字和流程控制關鍵字兩大類:
一、數據類型關鍵字 A .基本數據類型(5個) void :聲明函數無返回值或無參數,聲明無類型指針,顯式丟棄運算結果 char :字符型類型數據,屬於整型數據的一種 int :整型數據,通常為編譯器指定的機器字長 float :單精度浮點型數據,屬於浮點數據的一種 double :雙精度浮點型數據,屬於浮點數據的一種 B .類型修飾關鍵字(4個) short :修飾int,短整型數據,可省略被修飾的int。 long :修飾int,長整形數據,可省略被修飾的int。 signed :修飾整型數據,有符號數據類型 unsigned :修飾整型數據,無符號數據類型 C .復雜類型關鍵字(5個) struct :結構體聲明 union :共用體聲明 enum :枚舉聲明 typedef :聲明類型別名 sizeof :得到特定類型或特定類型變量的大小 D .存儲級別關鍵字(6個) auto :指定為自動變量,由編譯器自動分配及釋放。通常在棧上分配 static :指定為靜態變量,分配在靜態變量區,修飾函數時,指定函數作用域為文件內部 register :指定為寄存器變量,建議編譯器將變量存儲到寄存器中使用,也可以修飾函數形參,建議編譯器通過寄存器而不是堆棧傳遞參數 extern :指定對應變量為外部變量,即標示變量或者函數的定義在別的文件中,提示編譯器遇到此變量和函數時在其他模塊中尋找其定義。 const :與volatile合稱“cv特性”,指定變量不可被當前線程/進程改變(但有可能被系統或其他線程/進程改變) volatile :與const合稱“cv特性”,指定變量的值有可能會被系統或其他進程/線程改變,強制編譯器每次從內存中取得該變量的值 二、流程控制關鍵字 A .跳轉結構(4個) return :用在函數體中,返回特定值(或者是void值,即不返回值) continue :結束當前循環,開始下一輪循環 break :跳出當前循環或switch結構 goto :無條件跳轉語句 B .分支結構(5個) if :條件語句,後面不需要放分號 else :條件語句否定分支(與if連用) switch :開關語句(多重分支語句) case :開關語句中的分支標記 default :開關語句中的“其他”分支,可選。 C .循環結構(3個) for:for循環結構,for(1;2;3)4;的執行順序為1->2->4->3->2..循環,其中2為循環條件。在整個for循環過程中,表達式1只計算一次,表達式2和表達式3則可能計算多次,也可能一次也不計算。循環體可能多次執行,也可能一次都不執行。 do :do循環結構,do 1 while(2); 的執行順序是1->2->1..循環,2為循環條件 while :while循環結構,while(1) 2; 的執行順序是1->2->1..循環,1為循環條件 以上循環語句,當循環條件表達式為真則繼續循環,為假則跳出循環。
C語言34種運算符
按優先級從高到低排序,空行優先級下降一級別。
() 圓括號 [] 下標 -> 指針型結構成員 . 結構成員 /* 單目、右結合運算 */ ! 邏輯非 ~ 位非 ++ 自增 -- 自減 - 取負 (類型) 類型轉換 * 取內容 & 取地址 sizeof 求數據類型或者表達式的長度 /* 單目、右結合運算 */ /* * 雙目、左結合運算 * */ * 乘 / 除 % 求余 + 加 - 減 << 左移 >> 右移 < 小於 <= 小於等於 > 大於 >= 大於等於 == 等於 != 不等於 & 位與 ^ 位異或 | 位或 && 與 || 或 /* * 雙目、左結合運算 * */ ?: 條件運算 /* * * 三目、右結合運算 * * */ = 賦值運算(+=、-=、*=、/=、%=、>>=、<<=、&=、^=、|=) , 逗號運算