1. c語言介紹
一、C語言的 歷史
C語言由丹尼斯·里奇(Dennis Ritchie)於1972年在位於美國的AT&T(美國電話電報公司)貝爾實驗室發明。C語言借鑒前輩語言的功能和優點,並且克服了它們存在的問題。可以說C語言是對當時現有語言的一次改進和總結,創造出一種在那個時代更加優秀的編程語言。直至當前,C語言還是一種比較重要的編程語言,在比較流行的編程語言排行榜上常年霸榜前幾名,經久不衰。很多計算機專業都是以C語言作為第一編程入門語言,可見C語言的影響和重要性。
圖一 編程語言趨勢&2021排行榜(部分)
二、C語言的特點
C語言是一種中級編程語言,相對於低級語言匯編,高級語言Java等現代語言。C語言可以直接訪問內存,分配內存,與硬體設備交互,具有低級語言的特點;相對於現代的面向對象編程,C語言是一種面向過程語言,面向過程語言也稱為結構化程序設計語言。通俗的講,面向對象編程是把對象當做一個基本編程單位/個體;面向過程編程,把一些功能劃分成一個單元稱之為函數,程序的執行就是函數順序逐步的執行。
三、C語言的應用
C語言有很多方面的應用。首先,C語言發明者使用C語言編寫了Unix操作系統。Linux操作系統也是使用C語言開發出來的。現代很多基礎軟體是使用C語言開發的,比如我們常用的wps辦公軟體等等桌面應用軟體,如果你仔細觀察,你可能發現平時電腦上使用的很多應用就是使用C語言開發出來的,是不是有點小驚訝。可見C語言的應用是很普遍的。C語言應用的領域有系統內核、驅動、基礎應用、桌面應用等等。不過有些領域並沒有使用C語言,Web開發並沒有使用C語言,然而,Web伺服器、中間件使用C語言開發是比較司空見慣的。
我們可以列舉日常使用的軟體有哪些是使用C語言開發的。谷歌瀏覽器部分使用C語言開發,一些規模比較大的軟體,並不是使用單一的編程語言開發出來。QQ、微信PC端也是使用CC++開發。還有wps等等,很大一部分日常使用的PC軟體都是使用CC++開發的。軟體開發領域使用的軟體應用有更多是使用CC++開發出來的。
2. C語言介紹
C語言的發展過程
C語言是在70年代初問世的。一九七八年由美國電話電報公司(AT&T)貝爾實驗室正式發表了C語言。同時由B.W.Kernighan和D.M.Ritchit合著了著名的「THE C PROGRAMMING LANGUAGE」一書。通常簡稱為《K&R》,也有人稱之為《K&R》標准。但是,在《K&R》中並沒有定義一個完整的標准C語言,後來由美國國家標准學會在此基礎上制定了一個C 語言標准,於一九八三年發表。通常稱之為ANSI C。
當代最優秀的程序設計語言
早期的C語言主要是用於UNIX系統。由於C語言的強大功能和各方面的優點逐漸為人們認識,到了八十年代,C開始進入其它操作系統,並很快在各類大、中、小和微型計算機上得到了廣泛的使用。成為當代最優秀的程序設計語言之一。
C語言的特點
C語言是一種結構化語言。它層次清晰,便於按模塊化方式組織程序,易於調試和維護。C語言的表現能力和處理能力極強。它不僅具有豐富的運算符和數據類型,便於實現各類復雜的數據結構。它還可以直接訪問內存的物理地址,進行位(bit)一級的操作。由於C語言實現了對硬體的編程操作,因此C語言集高級語言和低級語言的功能於一體。既可用於系統軟體的開發,也適合於應用軟體的開發。此外,C語言還具有效率高,可移植性強等特點。因此廣泛地移植到了各類各型計算機上,從而形成了多種版本的C語言。
C語言版本
目前最流行的C語言有以下幾種:
·Microsoft C 或稱 MS C
·Borland Turbo C 或稱 Turbo C
·AT&T C
這些C語言版本不僅實現了ANSI C標准,而且在此基礎上各自作了一些擴充,使之更加方便、完美。
面向對象的程序設計語言
在C的基礎上,一九八三年又由貝爾實驗室的Bjarne Strou-strup推出了C++。 C++進一步擴充和完善了C語言,成為一種面向 對象的程序設計語言。C++目前流行的最新版本是Borland C++4.5,Symantec C++6.1,和Microsoft VisualC++ 2.0。C++提出了一些更為深入的概念,它所支持的這些面向對象的概念容易將問題空間直接地映射到程序空間,為程序員提供了一種與傳統結構程序設計不同的思維方式和編程方法。因而也增加了整個語言的復雜性,掌握起來有一定難度。
C和C++
但是,C是C++的基礎,C++語言和C語言在很多方面是兼容的。因此,掌握了C語言,再進一步學習C++就能以一種熟悉的語法來學習面向對象的語言,從而達到事半功倍的目的。
C源程序的結構特點
為了說明C語言源程序結構的特點,先看以下幾個程序。這幾個程 序由簡到難,表現了C語言源程序在組成結構上的特點。雖然有關內容還未介紹,但可從這些例子中了解到組成一個C源程序的基本部分和書寫格式。
main()
{
printf("C語言世界www.vcok.com,您好!\n");
}
main是主函數的函數名,表示這是一個主函數。每一個C源程序都必須有,且只能有一個主函數(main函數)。函數調用語句,printf函數的功能是把要輸出的內容送到顯示器去顯示。printf函數是一個由系統定義的標准函數,可在程序中直接調用。
3. c語言的發展史
C語言,是一種通用的、過程式的編程語言,廣泛用於系統與應用軟體的開發。具有高效、靈活、功能豐富、表達力強和較高的移植性等特點,在程序員中備受青睞。
C語言是由UNIX的研製者丹尼斯·里奇(Dennis Ritchie)於1970年 由 肯·湯普遜(Ken Thompson)所研製出的B語言的基礎上發展和完善起來的。目前,C語言編譯器普遍存在於各種不同的操作系統中,例如UNIX、MS-DOS、Microsoft Windows及Linux等。C語言的設計影響了許多後來的編程語言,例如C++、Objective-C、Java、C#等。
後來於1980年代,為了避免各開發廠商用的C語言語法產生差異,由美國國家標准局(American National Standard Institution)為C語言訂定了一套完整的國際標准語法,稱為ANSI C,作為C語言的標准。1980年代至今的有關程序開發工具,一般都支持符合ANSI C的語法。
C語言是一個程序語言,設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。C語言也很適合搭配匯編語言來使用。盡管C語言提供了許多低級處理的功能,但仍然保持著良好跨平台的特性,以一個標准規格寫出的C語言程序可在許多電腦平台上進行編譯,甚至包含一些嵌入式處理器(單片機或稱MCU)以及超級電腦等作業平台。
早期發展
C語言最早是由丹尼斯·里奇為了在PDP-11電腦上運行的UNIX系統所設計出來的編程語言,第一次發展在1969年到1973年之間。之所以被稱為「C」是因為C語言的很多特性是由一種更早的被稱為B語言的編程語言中發展而來。早期操作系統的核心大多由匯編語言組成,隨著C語言的發展,C語言已經可以用來編寫操作系統的核心。1973年,Unix操作系統的核心正式用C語言改寫,這是C語言第一次應用在操作系統的核心編寫上。
K&R C
1978年,丹尼斯·里奇(Dennis Ritchie)和布萊恩·柯林漢(Brian Kernighan)合作出版了《C程序設計語言》的第一版。書中介紹的C語言標准也被C語言程序員稱作「K&R C」,第二版的書中也包含了一些ANSI C的標准。K&R C主要介紹了以下特色:
結構(struct)類型
長整數(long int)類型
無符號整數(unsigned int)類型
把運算符=+和=-改為+=和-=。因為=+和=-會使得編譯器不知道用戶要處理i = -10還是i =- 10,使得處理上產生混淆。
即使在後來ANSI C標准被提出的許多年後,K&R C仍然是許多編譯器的最低標准要求,許多老舊的編譯仍然運行K&R C的標准。
ANSI C 和 ISO C
1989年,C語言被 ANSI 標准化(ANSI X3.159-1989)。標准化的一個目的是擴展K&R C。這個標准包括了一些新特性。在K&R出版後,一些新特性被非官方地加到C語言中。
void 函數
函數返回 struct 或 union 類型
void * 數據類型
在ANSI標准化自己的過程中,一些新的特性被加了進去。ANSI也規定了一套標准函數庫。ANSI ISO(國際標准化組織)成立 ISO/IEC JTC1/SC22/WG14 工作組,來規定國際標準的C語言。通過對ANSI標準的少量修改,最終通過了 ISO 9899:1990。隨後,ISO標准被 ANSI 採納。
傳統C語言到ANSI/ISO標准C語言的改進包括:
增加了真正的標准庫
新的預處理命令與特性
函數原型允許在函數申明中指定參數類型
一些新的關鍵字,包括 const、volatile 與 signed
寬字元、寬字元串與位元組多字元
對約定規則、聲明和類型檢查的許多小改動與澄清
WG14工作小組之後又於1995年,對1985年頒布的標准做了兩處技術修訂(缺陷修復)和一個補充(擴展)。下面是 1995 年做出的所有修改:
3 個新的標准庫頭文件 iso646.h、wctype.h 和 wchar.h
幾個新的記號與預定義宏,用於對國際化提供更好的支持
printf/sprintf 函數一系列新的格式代碼
大量的函數和一些類型與常量,用於多位元組字元和寬位元組字元
C99在ANSI的標准確立後,C語言的規范在一段時間內沒有大的變動,然而C++在自己的標准化創建過程中繼續發展壯大。《標准修正案一》在1995年為C語言創建了一個新標准,但是只修正了一些C89標准中的細節和增加更多更廣的國際字元集支持。不過,這個標准引出了1999年ISO 9899:1999的發表。它通常被稱為C99。C99被ANSI於2000年3月採用。
在C99中包括的特性有:
增加了對編譯器的限制,比如源程序每行要求至少支持到 4095 位元組,變數名函數名的要求支持到 63 位元組(extern 要求支持到 31)。
增強了預處理功能。例如:
宏支持取可變參數 #define Macro(...) __VA_ARGS__
使用宏的時候,允許省略參數,被省略的參數會被擴展成空串。
支持 // 開頭的單行注釋(這個特性實際上在C89的很多編譯器上已經被支持了)
增加了新關鍵字 restrict, inline, _Complex, _Imaginary, _Bool
支持 long long, long double _Complex, float _Complex 等類型
支持不定長的數組,即數組長度可以在運行時決定,比如利用變數作為數組長度。聲明時使用 int a[var] 的形式。不過考慮到效率和實現,不定長數組不能用在全局,或 struct 與 union 里。
變數聲明不必放在語句塊的開頭,for 語句提倡寫成 for(int i=0;i<100;++i) 的形式,即i 只在 for 語句塊內部有效。
允許採用(type_name){xx,xx,xx} 類似於 C++ 的構造函數的形式構造匿名的結構體。
初始化結構的時候允許對特定的元素賦值,形式為:
struct {int a[3],b;} foo[] = { [0].a = {1}, [1].a = 2 };
struct {int a, b, c, d;} foo = { .a = 1, .c = 3, 4, .b = 5} // 3,4 是對 .c,.d 賦值的
格式化字元串中,利用 \u 支持 unicode 的字元。
支持 16 進制的浮點數的描述。
printf scanf 的格式化串增加了對 long long int 類型的支持。
浮點數的內部數據描述支持了新標准,可以使用 #pragma 編譯器指令指定。
除了已有的 __line__ __file__ 以外,增加了 __func__ 得到當前的函數名。
允許編譯器化簡非常數的表達式。
修改了 / % 處理負數時的定義,這樣可以給出明確的結果,例如在C89中-22 / 7 = -3, -22 % 7 = -1 ,也可以-22 / 7= -4, -22 % 7 = 6。 而C99中明確為 -22 / 7 = -3, -22 % 7 = -1,只有一種結果。
取消了函數返回類型默認為 int 的規定。
允許 struct 定義的最後一個數組不指定其長度,寫做 [] 。
const const int i 將被當作 const int i 處理。
增加和修改了一些標准頭文件,比如定義 bool 的 <stdbool.h> ,定義一些標准長度的 int 的 <inttypes.h> ,定義復數的 <complex.h> ,定義寬字元的 <wctype.h> ,類似於泛型的數學函數 <tgmath.h>, 浮點數相關的 <fenv.h>。 在<stdarg.h> 增加了 va_ 用於復制 ... 的參數。<time.h> 里增加了 struct tmx ,對 struct tm 做了擴展。
輸入輸出對寬字元以及長整數等做了相應的支持。