起源 1950晶體管電腦年代,歐美電腦學家合力所組成的聯席大會共同開發 ALGOL(ALGOrithmic Language),也稱為A語言。 1963年,劍橋大學將ALGOL 60語言發展成為CPL(Combined Programming Language)語言。 1967年,英國劍橋大學的 ...
起源
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 求數據類型或者表達式的長度 /* 單目、右結合運算 */ /* * 雙目、左結合運算 * */ * 乘 / 除 % 求餘 + 加 - 減 << 左移 >> 右移 < 小於 <= 小於等於 > 大於 >= 大於等於 == 等於 != 不等於 & 位與 ^ 位異或 | 位或 && 與 || 或 /* * 雙目、左結合運算 * */ ?: 條件運算 /* * * 三目、右結合運算 * * */ = 賦值運算(+=、-=、*=、/=、%=、>>=、<<=、&=、^=、|=) , 逗號運算