1972年,貝爾實(shí)驗(yàn)室的丹尼斯·里奇(Dennis Ritch)和肯·湯普遜(Ken Thompson)在開發(fā)UNIX操作系統(tǒng)時(shí)設(shè)計(jì)了C語言。
C語言是在B語言(湯普遜發(fā)明)的基礎(chǔ)上進(jìn)行的設(shè)計(jì)。
2.1 優(yōu)點(diǎn)
設(shè)計(jì)特性:能輕松的完成自定向下的規(guī)劃、結(jié)構(gòu)化編程和模塊化設(shè)計(jì);C語言編寫的程序更易懂、更可靠。
高效性:運(yùn)行速度快,更接近匯編語言的高效特性和微調(diào)的能力。
可移植性:C程序只需要稍作修改或不修改,通過其他系統(tǒng)的C編譯器進(jìn)行編譯就能其他的系統(tǒng)上運(yùn)行。而無論是使用家庭計(jì)算機(jī)、專業(yè)工作站,還是大型機(jī);無論是使用Windows、Unix、linux還是Mac操作系統(tǒng);從8位微處理器到超級計(jì)算機(jī)都能找到針對特定系統(tǒng)的C編譯器。
強(qiáng)大而靈活:很多的操作系統(tǒng)有C程序的代碼以及很多編程語言的編譯器、解釋器都由C語言實(shí)現(xiàn),C程序還可解決物理學(xué)、工程學(xué)的問題,甚至可用于制作電影的動畫特效
面向程序員:程序利用C可以訪問硬件、控制內(nèi)存中的位。
2.2 缺點(diǎn)
C語言功能強(qiáng)大,但卻很容易犯錯(cuò)誤。特別是指針的使用很強(qiáng)大,但稍不留神就容易出錯(cuò)。
3.1 K&R C或經(jīng)典C
1987年,布萊恩·柯林漢(Brian Kernighan)和丹尼斯·里奇(Dennis Ritchie)合著的The Programming Language第一版是公認(rèn)的C標(biāo)準(zhǔn),通常稱之為K&R C或經(jīng)典C。實(shí)際上,由于缺乏官方標(biāo)準(zhǔn),UNIX實(shí)現(xiàn)提供的庫已成為標(biāo)準(zhǔn)庫。
3.2 ANSI/ISO C標(biāo)準(zhǔn)(也叫C89或C90標(biāo)準(zhǔn))
美國國家標(biāo)準(zhǔn)協(xié)會(ANSI)于1983年組建了一個(gè)委員會(X3J11),開發(fā)了一套新標(biāo)準(zhǔn),并于1989年正式公布。該標(biāo)準(zhǔn)定義了C語言和C標(biāo)準(zhǔn)庫。
國際標(biāo)準(zhǔn)化組織與1990年采用了這套C標(biāo)準(zhǔn)(ISO C)。ISO C和ANSI C是完全相同的標(biāo)準(zhǔn)。
ANSI/ISO標(biāo)準(zhǔn)的最終版本通常叫作C89(因?yàn)锳NSI于1989年批準(zhǔn)該標(biāo)準(zhǔn))或C90(因?yàn)镮SO于1990年批準(zhǔn)該標(biāo)準(zhǔn))。另外,由于ANSI先發(fā)布C標(biāo)準(zhǔn),因此業(yè)界人士通常使用ANSI C。
3.3 C99標(biāo)準(zhǔn)
1994年,ANSI/ISO 聯(lián)合委員會(C9X委員會)開始修訂C標(biāo)準(zhǔn),最終發(fā)布了C99標(biāo)準(zhǔn)。
3.4 C11標(biāo)準(zhǔn)
標(biāo)準(zhǔn)委員會在2007年承諾C標(biāo)準(zhǔn)的下一個(gè)版本是C1X,2011年終于發(fā)布了C11標(biāo)準(zhǔn)。
4 C程序的編譯與鏈接
C程序的源代碼通過編譯器的編譯生成目標(biāo)代碼,目標(biāo)代碼、庫代碼和啟動代碼通過連接器的鏈接生成可執(zhí)行代碼。其過程如下圖所示:
5.1 典型的C程序
一個(gè)簡單的C程序代碼:
一個(gè)簡單的C程序可剖析為如下結(jié)構(gòu):
5.2 簡單C程序基本概念
5.2.1 #include指令和頭文件
#include這行代碼是一條C預(yù)處理器指令(preprocessor directive)。通常,C編輯器在編譯前會對源代碼做一些準(zhǔn)備工作,即預(yù)處理(preprocessor)。
#include <stido.h>的作用相當(dāng)于吧stdio.h文件中的所有內(nèi)容都輸入到該行所在的位置。
5.2.2 main()函數(shù)
C程序一定是從main函數(shù)開始,并以main函數(shù)的結(jié)束而結(jié)束。
5.2.3 注釋
適當(dāng)?shù)淖⑨屇芴岣叱绦虻目勺x性,在C程序中支持兩種注釋風(fēng)格。具體如下:
/*這是一條注釋,可多行注釋*///這是一條注釋,只能單行注釋(C99新增的注釋風(fēng)格)
5.2.4 花括號、函數(shù)體和塊
一般而言,所有的C函數(shù)都使用花括號來標(biāo)記函數(shù)體開始和結(jié)束。例如main函數(shù):
intmain(void){ /*函數(shù)體*/ }
花括號還用于把函數(shù)中的多條語句合并為一個(gè)單元或塊。例如for語句:
5.2.5 聲明
int num;
這條聲明完成了兩件事,其一,在函數(shù)中有一個(gè)名為num的變量,其二,int表明num是一個(gè)整數(shù)。
在C語言中,所有的變量都必須先聲明才能使用。
5.2.6 賦值
在執(zhí)行int num;聲明時(shí),編譯器在計(jì)算機(jī)內(nèi)存中為變量num預(yù)留了空間,然后在執(zhí)行這行賦值表達(dá)式時(shí),把值存儲在之前預(yù)留的位置。
5.3 調(diào)試程序
5.3.1 語法錯(cuò)誤
不遵循C語言的規(guī)則就會犯語法錯(cuò)誤。 編譯器一般能檢測出來。
5.3.2 語義錯(cuò)誤
語義錯(cuò)誤就是意思上的錯(cuò)誤。編譯器一般不能檢測出來。