C語言不僅是IT的必修課,也是所有理工科、甚至所有專業(yè)的必修課。它具有簡潔緊湊、靈活方便、適用范圍大、可移植等優(yōu)點,是應(yīng)用最為廣泛的一種高級程序設(shè)計語言。
計算機(jī)語言概述
計算機(jī)語言是用于人與計算機(jī)間通信的語言,為使計算機(jī)進(jìn)行各種不同的工作,就需要有一種專門用來編寫計算機(jī)程序的字符、數(shù)字和語法規(guī)則,而這些規(guī)則構(gòu)成計算機(jī)的指令。計算機(jī)語言分機(jī)器語言、匯編語言和高級語言3種,下面將分別進(jìn)行詳細(xì)講解。
機(jī)器語言
計算機(jī)工作基于二進(jìn)制,它只能識別和接受由1和0組成的指令,其中1表示通電,0表示斷電,這種計算機(jī)能直接識別和接受的二進(jìn)制代碼稱為機(jī)器指令。機(jī)器指令的集合就是該計算機(jī)的機(jī)器語言,機(jī)器語言具有靈活、直接執(zhí)行和速度快等特點。不同型號的計算機(jī)其機(jī)器語言是不相通的,按照一種計算機(jī)的機(jī)器指令編制的程序,不能在另一種計算機(jī)上執(zhí)行。因此用機(jī)器語言編寫程序,編程人員要首先熟記所用計算機(jī)的全部指令代碼和代碼的涵義。而且,編寫出來的程序都是0和1的指令代碼,直觀性差,容易出錯。因此只有極少數(shù)的計算機(jī)專業(yè)人員會學(xué)習(xí)和使用機(jī)器語言,絕大多數(shù)的程序員不再學(xué)習(xí)機(jī)器語言。
匯編語言
盡管機(jī)器語言對計算機(jī)來說很好懂也很好用,但是對于編程人員來說,記住0和1的組成的指令簡直就是煎熬,為了解決機(jī)器語言的難記憶問題,匯編語言誕生了,它用簡潔的符號串或字母來替代不易記憶的機(jī)器語言,而計算機(jī)識別不了符號串,這就需要一個將 這些符號翻譯成機(jī)器語言的程序,把這種程序稱為匯編程序。匯編程序里一條指令只能對應(yīng)實際操作中的一個很細(xì)小的動作,例如自增、移動,所以匯編源程序一般比較繁長、易出錯,并且使用匯編語言編程需要有扎實的計算機(jī)知識,才能編出高質(zhì)量代碼。
C語言
絕大數(shù)編程者喜歡高級語言,它簡化了程序中的指令、略去了很多細(xì)節(jié),并且與計算機(jī)的硬件關(guān)系不大,更利于程序員編程。此外,高級語言經(jīng)歷了結(jié)構(gòu)化程序設(shè)計和面向?qū)ο蟪绦蛟O(shè)計,使得程序可讀性、可靠性、可維護(hù)性都增強(qiáng)。常見的高級語言包括VB、C、C++、Java、C#、Python等等。
在C語言誕生以前,系統(tǒng)軟件主要是用匯編語言編寫的,由于匯編語言程序依賴于計算機(jī)硬件,其可讀性和可移植性都極差,一般的高級語言又難以實現(xiàn)對計算機(jī)硬件的直接操作(這正是匯編語言的優(yōu)勢),于是人們迫切希望有一種兼有匯編語言和高級語言特性的新語言,C語言就在這種需求下應(yīng)運而生。
C語言的發(fā)展頗為有趣。它的原型ALGOL 60語言,也稱為A語言。
1963年,劍橋大學(xué)將ALGOL 60語言發(fā)展成為CPL(Combined Programming Language)語言。
1967年,劍橋大學(xué)的馬丁·理查茲(Matin Richards)對CPL語言進(jìn)行了簡化,于是產(chǎn)生了BCPL語言。
1970年,美國貝爾實驗室的肯·湯普森(Ken Thompson)將BCPL進(jìn)行了修改,并為它起了一個有趣的名字“B語言”,其含義是將CPL語言煮干,提煉出它的精華,并且他用B語言寫了第一個UNIX操作系統(tǒng)。
1973年,美國貝爾實驗室的丹尼斯·里奇(Dennis M.Ritchie)在B語言的基礎(chǔ)上設(shè)計出了一種新的語言,他取了BCPL的第二個字母作為這種語言的名字,即C語言。
1978年,布賴恩?凱尼漢(Brian W.Kernighan)和丹尼斯·里奇(Dennis M.Ritchie)出版了名著《The C Programming Language》,從而使C語言成為目前世界上流傳最廣泛的高級程序設(shè)計語言。
早期的C語言主要是用于UNIX系統(tǒng),由于C語言的強(qiáng)大功能和各方面的優(yōu)點逐漸為人們認(rèn)識。到了八十年代,C開始進(jìn)入其它操作系統(tǒng),并很快在各類大、中、小和微型計算機(jī)上得到了廣泛的使用,成為當(dāng)代最優(yōu)秀的程序設(shè)計語言之一。
隨著微型計算機(jī)的日益普及,出現(xiàn)了許多C語言版本。由于沒有統(tǒng)一的標(biāo)準(zhǔn),使得這些C語言之間出現(xiàn)了一些不一致的地方。為了改變這種情況,美國國家標(biāo)準(zhǔn)學(xué)會(ANSI)于1989年為C語言制定了一套ANSI標(biāo)準(zhǔn),即C語言標(biāo)準(zhǔn)ANSI X3.159-1989,被稱為C89。之后在1990年,國際標(biāo)準(zhǔn)化組織ISO也接受了同樣的標(biāo)準(zhǔn)ISO9899-1990,該標(biāo)準(zhǔn)被稱為C90。這兩個標(biāo)準(zhǔn)只有細(xì)微的差別,因此,一般而言C89和C90指的是同一個C語言標(biāo)準(zhǔn)。在ANSI標(biāo)準(zhǔn)化發(fā)布了C89標(biāo)準(zhǔn)以后,C語言的標(biāo)準(zhǔn)在一段相當(dāng)?shù)臅r間內(nèi)都保持不變,直到1999年ANSI通過了C99標(biāo)準(zhǔn),C99標(biāo)準(zhǔn)相對C89做了很多修改,增加了基本數(shù)據(jù)類型、關(guān)鍵字和一些系統(tǒng)函數(shù)等,這個版本就是通常提及的C99。但由于很多編譯器仍然沒有對C99提供完整的支持,因此本書將按照C89標(biāo)準(zhǔn)來進(jìn)行講解,在適當(dāng)時會補(bǔ)充C99標(biāo)準(zhǔn)的規(guī)定和用法。
C語言對操作系統(tǒng)和系統(tǒng)使用程序以及需要對硬件進(jìn)行操作的場合,用C語言明顯優(yōu)于其它高級語言,許多大型應(yīng)用軟件都是用C語言編寫的。它還具有繪圖能力強(qiáng),并具備很強(qiáng)的數(shù)據(jù)處理能力,因此適于編寫系統(tǒng)軟件,三維,二維圖形和動畫它是數(shù)值計算的高級語言。主要特征如下:
①簡潔緊湊、靈活方便:
C語言一共只有32個關(guān)鍵字,9種控制語句,程序書寫自由,主要用小寫字母表示。它把高級語言的基本結(jié)構(gòu)和語句與低級語言的實用性結(jié)合起來。
②運算符豐富:
C的運算符包含的范圍很廣泛,共有種34個運算符。C語言把括號、賦值、強(qiáng)制類型轉(zhuǎn)換等都作為運算符處理。從而使C的運算類型極其豐富表達(dá)式類型多樣化,靈活使用各種運算符可以實現(xiàn)在其它高級語言中難以實現(xiàn)的運算。
③數(shù)據(jù)結(jié)構(gòu)豐富:
C的數(shù)據(jù)類型有:整型、實型、字符型、數(shù)組類型、指針類型、結(jié)構(gòu)體類型、共用體類型等。能用來實現(xiàn)各種復(fù)雜的數(shù)據(jù)類型的運算。并引入了指針概念,使程序效率更高。另外C語言具有強(qiáng)大的圖形功能,支持多種顯示器和驅(qū)動器。且計算功能、邏輯判斷功能強(qiáng)大。
④結(jié)構(gòu)式語言:
結(jié)構(gòu)式語言的顯著特點是代碼及數(shù)據(jù)的分隔化,即程序的各個部分除了必要的信息交流外彼此獨立。這種結(jié)構(gòu)化方式可使程序?qū)哟吻逦阌谑褂?、維護(hù)以及調(diào)試。C語言是以函數(shù)形式提供給用戶的,這些函數(shù)可方便的調(diào)用,并具有多種循環(huán)、條件語句控制程序流向,從而使程序完全結(jié)構(gòu)化。
⑤程序設(shè)計自由:
一般的高級語言語法檢查比較嚴(yán),能夠檢查出幾乎所有的語法錯誤。而C語言允許程序編寫者有較大的自由度。
⑥直接訪問物理地址:
C語言可直接訪問物理地址,可以直接對硬件進(jìn)行操作,因此C語言既具有高級語言的功能,又具有低級語言的許多功能,能夠象匯編語言一樣對位、字節(jié)和地址進(jìn)行操作,而這三者是計算機(jī)最基本的工作單元,可以用來寫系統(tǒng)軟件。
⑦程序執(zhí)行效率高:
C語言程序生成代碼質(zhì)量高,程序執(zhí)行效率高,一般只比匯編程序生成的目標(biāo)代碼效率低10~20%。
⑧可移植:
C語言有一個突出的優(yōu)點就是適合于多種操作系統(tǒng),如DOS、UNIX,也適用于多種機(jī)型。
主流開發(fā)環(huán)境
較早期程序設(shè)計的各個階段都要用不同的軟件來進(jìn)行處理,如先用字處理軟件編輯源程序,然后用鏈接程序進(jìn)行函數(shù)、模塊連接,再用編譯程序進(jìn)行編譯,開發(fā)者必須在幾種軟件間來回切換操作。
現(xiàn)在的編程開發(fā)軟件將編輯、編譯、調(diào)試等功能集成在一個桌面環(huán)境中,這就是集成開發(fā)環(huán)境,又稱IDE(Integrated Development EnvironMent),將它們集成在一起這樣就大大方便了用戶。
IDE為用戶使用C、C++、Java和Delphi等現(xiàn)代編程語言提供了方便。不同的技術(shù)體系有不同的IDE。比如Visual Studio可以稱為C、C++、VB、C#等語言的集成開發(fā)環(huán)境,所以Visual Studio可以叫做IDE。同樣,Borland的JBuilder也是一個IDE,它是Java的IDE。Eclipse也是一個IDE,可以用于開發(fā)Java語言和C++語言。下面將介紹幾種主流的C語言開發(fā)環(huán)境。
①Code::Bloocks
Code::Blocks 是一個體積小、開放源碼、免費的跨平臺C/C++集成開發(fā)環(huán)境,它提供了大量的工程模板,支持插件,并且具有強(qiáng)大而靈活的配置功能,是目前主流的開發(fā)環(huán)境。
②Microsoft Visual Studio
Microsoft Visual Studio是美國微軟公司推出的集成開發(fā)環(huán)境。它包括整個軟件生命周期中所需要的大部分工具,如代碼管控工具、集成開發(fā)環(huán)境等,但軟件體積偏大,目前最新版本為Visual Studio 2015。
③Eclipse
Eclipse是用于Java語言開發(fā)的集成開發(fā)環(huán)境,現(xiàn)在Eclipse已經(jīng)可以用來開發(fā)C、C++、Python和PHP等眾多語言,此外,也可以安裝插件,比如CDT是Eclipse的插件,它使得Eclipse可以作為C/C++的集成開發(fā)環(huán)境。
④Vim
Vim是一個功能強(qiáng)大的文本編輯器,它是從Vi編輯器發(fā)展過來的,可以通過插件擴(kuò)展功能來達(dá)到和集成開發(fā)環(huán)境相同的效果。因此,Vim有的時候也被程序員當(dāng)做集成開發(fā)環(huán)境使用。
⑤Microsoft Visual C++6.0
Microsoft Visual C++ 6.0,簡稱VC6.0,是微軟于1998年推出的一款C++編譯器,集成了MFC 6.0,包含標(biāo)準(zhǔn)版(Standard Edition)、專業(yè)版(Professional Edition)與企業(yè)版(Enterprise Edition)[2]。發(fā)行至今一直被廣泛地用于大大小小的項目開發(fā)。本書假設(shè)您的開發(fā)環(huán)境為Microsoft Visual C++ 6.0。
第一個C程序通過前面對C語言的介紹,相信大家已經(jīng)對C語言產(chǎn)生了濃厚的興趣,下面正式開啟C語言的編程之旅。為了讓初學(xué)者對學(xué)習(xí)C語言產(chǎn)生足夠的信心,第一個程序盡量簡短。
#include
int main()
{
printf(“這是第一個C語言程序!n”);
return 0;
}
例子代碼實現(xiàn)了一個C程序,在屏幕上輸出“這是第一個C語言程序!”信息。下面對其中代碼逐行進(jìn)行詳細(xì)地解釋。
第1行:字符‘#’是預(yù)處理標(biāo)志,用來對文件進(jìn)行預(yù)處理操作。預(yù)處理標(biāo)志表示該行代碼要最先處理,所以它要在編譯器編譯代碼之前運行。include是預(yù)處理指令。它后面跟著一對尖括號,表示將尖括號中的文件在這里讀入。stdio是standard input output的縮寫形式,即“標(biāo)準(zhǔn)輸入輸出”,stdio.h就是標(biāo)準(zhǔn)輸入輸出頭文件,這個頭文件中聲明了用于輸入或輸出的函數(shù)。由于此程序中用到了輸出函數(shù)printf(),因此需要添加輸入輸出頭文件。
第2行:聲明了一個main函數(shù)(也稱主函數(shù)),其中int是函數(shù)的返回值類型,每個函數(shù)都需要注明其返回值類型,表示在函數(shù)結(jié)束后,要向操作系統(tǒng)返回的數(shù)值類型?!埃ǎ眲t表明是一個函數(shù)。main函數(shù)的本質(zhì)是“函數(shù)”,但它與普通函數(shù)有著本質(zhì)的區(qū)別,普通函數(shù)需要由其他函數(shù)調(diào)用或者激活,main函數(shù)則是在程序開始時自動執(zhí)行。每個C程序都有一個main函數(shù),它是程序的入口。在上面的C程序中,main函數(shù)實現(xiàn)了屏幕上輸出“這是第一個C語言程序!”的功能。
第3行:左大括號“{”表示函數(shù)的開始。
第4行:使用printf函數(shù)來輸出一行信息。printf是print format的縮寫,print是打印的意思,format是格式化的意思,printf則是格式化輸出或者按格式輸出?!埃ǎ眲t表明printf是一個函數(shù)名,其中放置的是main函數(shù)傳遞給printf函數(shù)的信息。如上面程序中的“這是第一個C語言程序!”這個信息叫做參數(shù),完成的名稱為函數(shù)的實際參數(shù)。printf函數(shù)接收到main函數(shù)傳遞給它的參數(shù),然后將雙引號之間的內(nèi)容按照一定的格式輸出到屏幕上。
第5行:return關(guān)鍵字,表示返回,作用是從函數(shù)中返回,后面跟著要返回的值——0。由于該句被添加到main函數(shù)中,表示main函數(shù)向操作系統(tǒng)返回一個0值(普通函數(shù)在執(zhí)行完畢后,都會返回一個執(zhí)行結(jié)果,return
將這個執(zhí)行結(jié)果返回給操作系統(tǒng))。操作系統(tǒng)通過返回值來了解程序退出的狀態(tài),一般用0表示正常,用1表示異常。如果返回值類型為void,return后面則不用跟返回值,直接寫return即可終止函數(shù)的運行。
第6行:右大括號“}”表示函數(shù)的結(jié)束。
在對main函數(shù)進(jìn)行聲明時,可能會發(fā)現(xiàn)這樣的寫法:main(),它沒有為main函數(shù)注明返回值類型。
在C 語言中,凡是未注明返回值類型的函數(shù),就會被編譯器作為返回整型值處理。這個寫法在C90標(biāo)準(zhǔn)中還是勉強(qiáng)允許的,但是到了C99標(biāo)準(zhǔn)就不予通過了,因此不要這樣寫main函數(shù)。
另外,還可能會有這樣的寫法:void main()。
void作為返回值類型時,則表示“無類型”,常用在對函數(shù)的參數(shù)類型、返回值、函數(shù)中的指針類型進(jìn)行聲明。由于任何函數(shù)都必須注明返回值類型,void則表示main函數(shù)沒有返回值。有些編譯器允許這種寫法,有些則不允許,因此考慮到C語言的移植性,要盡量采用標(biāo)準(zhǔn)寫法:int main()。
C程序運行流程
C語言并不能直接被計算機(jī)所理解,需要將C語言轉(zhuǎn)變成可執(zhí)行代碼,即二進(jìn)制代碼。在C語言轉(zhuǎn)變成二進(jìn)制可執(zhí)行代碼時,是以工程為單位的。而一個工程中往往會包含多個C文件。因此,需要將每個C文件都編譯成二進(jìn)制代碼。此時,每個C文件所對應(yīng)的二進(jìn)制代碼是獨立的。由于工程是一個系統(tǒng),所以需要將所有的C文件二進(jìn)制代碼鏈接到一起,形成一個工程的可執(zhí)行文件。一般程序的運行流程包括編輯、編譯、連接、運行四個環(huán)節(jié),運行C語言時也需經(jīng)過這四個環(huán)節(jié)。
編輯類似于文本編輯,將程序代碼輸入進(jìn)去,可以修改,增加,刪除。
編譯是將C代碼轉(zhuǎn)換成CPU可執(zhí)行機(jī)器指令的過程,每個.c文件生成一個.obj文件。
鏈接是把生成的(多個) .obj 文件及用到的庫文件(.lib)一起組合生成可執(zhí)行文件(.exe)。
運行是指運行鏈接環(huán)節(jié)生成的可執(zhí)行文件,得到預(yù)期結(jié)果的過程。
首先編寫好C程序,然后將每個.c文件生成一個.obj文件,再將生成的.obj 文件及用到的庫文件(.lib)一起組合生成可執(zhí)行文件(.exe),最后運行達(dá)到預(yù)期的結(jié)果。
審核編輯:黃飛
-
C語言
+關(guān)注
關(guān)注
180文章
7594瀏覽量
135858 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4277瀏覽量
62323 -
計算機(jī)語言
+關(guān)注
關(guān)注
1文章
15瀏覽量
9377
原文標(biāo)題:如何學(xué)習(xí)C語言?
文章出處:【微信號:單片機(jī)與嵌入式,微信公眾號:單片機(jī)與嵌入式】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論