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