1 C語言的起源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 C語言的特點(diǎn)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ì)算機(jī)都能找到針對(duì)特定系統(tǒng)的C編譯器。 強(qiáng)大而靈活:很多的操作系統(tǒng)有C程序的代碼以及很多編程語言的編譯器、解釋器都由C語言實(shí)現(xiàn),C程序還可解決物理學(xué)、工程學(xué)的問題,甚至可用于制作電影的動(dòng)畫特效 面向程序員:程序利用C可以訪問硬件、控制內(nèi)存中的位。 2.2 缺點(diǎn) C語言功能強(qiáng)大,但卻很容易犯錯(cuò)誤。特別是指針的使用很強(qiáng)大,但稍不留神就容易出錯(cuò)。 3 C語言標(biāo)準(zhǔn)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é)會(huì)(ANSI)于1983年組建了一個(gè)委員會(huì)(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)合委員會(huì)(C9X委員會(huì))開始修訂C標(biāo)準(zhǔn),最終發(fā)布了C99標(biāo)準(zhǔn)。 3.4 C11標(biāo)準(zhǔn) 標(biāo)準(zhǔn)委員會(huì)在2007年承諾C標(biāo)準(zhǔn)的下一個(gè)版本是C1X,2011年終于發(fā)布了C11標(biāo)準(zhǔn)。 4 C程序的編譯與鏈接 C程序的源代碼通過編譯器的編譯生成目標(biāo)代碼,目標(biāo)代碼、庫代碼和啟動(dòng)代碼通過連接器的鏈接生成可執(zhí)行代碼。其過程如下圖所示: 5 C程序的基本結(jié)構(gòu)5.1 典型的C程序 一個(gè)簡單的C程序代碼: #include intmain(void)/*一個(gè)簡單的C程序*/{ intnum;/*定義一個(gè)名為num的變量*/ num=1;/*為num賦值*/ printf('I am a simple ');/*使用printf()函數(shù)*/ printf('computer.\n'); printf('My favorite number is %d because it is first.\n',num); return0;} 一個(gè)簡單的C程序可剖析為如下結(jié)構(gòu): 5.2 簡單C程序基本概念 5.2.1 #include指令和頭文件 #include這行代碼是一條C預(yù)處理器指令(preprocessor directive)。通常,C編輯器在編譯前會(huì)對(duì)源代碼做一些準(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 花括號(hào)、函數(shù)體和塊 { ...... } 一般而言,所有的C函數(shù)都使用花括號(hào)來標(biāo)記函數(shù)體開始和結(jié)束。例如main函數(shù): intmain(void){ /*函數(shù)體*/ } 花括號(hào)還用于把函數(shù)中的多條語句合并為一個(gè)單元或塊。例如for語句: for(;;){ /*多條語句*/ } 5.2.5 聲明 int num; 這條聲明完成了兩件事,其一,在函數(shù)中有一個(gè)名為num的變量,其二,int表明num是一個(gè)整數(shù)。 在C語言中,所有的變量都必須先聲明才能使用。 5.2.6 賦值 num =1; 在執(zhí)行int num;聲明時(shí),編譯器在計(jì)算機(jī)內(nèi)存中為變量num預(yù)留了空間,然后在執(zhí)行這行賦值表達(dá)式時(shí),把值存儲(chǔ)在之前預(yù)留的位置。 5.3 調(diào)試程序 5.3.1 語法錯(cuò)誤 不遵循C語言的規(guī)則就會(huì)犯語法錯(cuò)誤。 編譯器一般能檢測(cè)出來。 5.3.2 語義錯(cuò)誤 語義錯(cuò)誤就是意思上的錯(cuò)誤。編譯器一般不能檢測(cè)出來。 |
|