C語言是中級(jí)語言
C語言通常稱為中級(jí)計(jì)算機(jī)語言。中級(jí)語言并沒有貶義,不意味著它功能差、難以使用、或者比B A S I C、P a s c a l那樣的高級(jí)語言原始,也不意味著它與匯編語言相似,會(huì)給使用者帶來類似的麻煩。C語言之所以被稱為中級(jí)語言,是因?yàn)樗迅呒?jí)語言的成分同匯編語言的功能結(jié)合起來了。表1 - 1表明了C語言在計(jì)算機(jī)語言中所處的地位。
作為中級(jí)語言,C允許對(duì)位、字節(jié)和地址這些計(jì)算機(jī)功能中的基本成分進(jìn)行操作。C語言程序非常容易移植??梢浦残员硎緸槟撤N計(jì)算機(jī)寫的軟件可以用到另一種機(jī)器上去。舉例來說,如果為蘋果機(jī)寫的一個(gè)程序能夠方便地改為可以在IBM PC 上運(yùn)行的程序,則稱為是可移植的。
所有的高級(jí)語言都支持?jǐn)?shù)據(jù)類型的概念。一個(gè)數(shù)據(jù)類型定義了一個(gè)變量的取值范圍和可在其上操作的一組運(yùn)算。常見的數(shù)據(jù)類型是整型、字符型和實(shí)數(shù)型。雖然C語言有五種基本數(shù)據(jù)類型,但與P a s c a l或A d a相比,它卻不是強(qiáng)類型語言。C程序允許幾乎所有的類型轉(zhuǎn)換。例如,字符型和整型數(shù)據(jù)能夠自由地混合在大多數(shù)表達(dá)式中進(jìn)行運(yùn)算。這在強(qiáng)類型高級(jí)語言中是不允許的。
C語言的另一個(gè)重要特點(diǎn)是它僅有3 2個(gè)關(guān)鍵字,這些關(guān)鍵字就是構(gòu)成C語言的命令。和IBM PC的B A S I C相比,后者包含的關(guān)鍵字達(dá)1 5 9個(gè)之多。
C語言是結(jié)構(gòu)化語言
雖然從嚴(yán)格的學(xué)術(shù)觀點(diǎn)上看,C語言是塊結(jié)構(gòu)(b l o c k - s t r u c t u r e d)語言,但是它還是常被稱為結(jié)構(gòu)化語言。這是因?yàn)樗诮Y(jié)構(gòu)上類似于A L G O L、P a s c a l和M o d u l a - 2(從技術(shù)上講,塊結(jié)構(gòu)語言允許在過程和函數(shù)中定義過程或函數(shù)。用這種方法,全局和局部的概念可以通過“作用域”規(guī)則加以擴(kuò)展,“作用域”管理變量和過程的“可見性”。因?yàn)镃語言不允許在函數(shù)中定義函數(shù),所以不能稱之為通常意義上的塊結(jié)構(gòu)語言)。
結(jié)構(gòu)化語言的顯著特征是代碼和數(shù)據(jù)的分離。這種語言能夠把執(zhí)行某個(gè)特殊任務(wù)的指令和數(shù)據(jù)從程序的其余部分分離出去、隱藏起來。獲得隔離的一個(gè)方法是調(diào)用使用局部(臨時(shí))變量的子程序。通過使用局部變量,我們能夠?qū)懗鰧?duì)程序其它部分沒有副作用的子程序。這使得編寫共享代碼段的程序變得十分簡(jiǎn)單。如果開發(fā)了一些分離很好的函數(shù),在引用時(shí)我們僅需要知道函數(shù)做什么,不必知道它如何做。切記:過度使用全局變量(可以被全部程序訪問的變量)會(huì)由于意外的副作用而在程序中引入錯(cuò)誤。
結(jié)構(gòu)化語言比非結(jié)構(gòu)化語言更易于程序設(shè)計(jì),用結(jié)構(gòu)化語言編寫的程序的清晰性使得它們更易于維護(hù)。這已是人們普遍接受的觀點(diǎn)了。C語言的主要結(jié)構(gòu)成分是函數(shù)C的獨(dú)立子程序。
在C語言中,函數(shù)是一種構(gòu)件(程序塊),是完成程序功能的基本構(gòu)件。函數(shù)允許一個(gè)程序的諸任務(wù)被分別定義和編碼,使程序模塊化??梢源_信,一個(gè)好的函數(shù)不僅能正確工作且不會(huì)對(duì)程序的其它部分產(chǎn)生副作用。
1.2.3 C語言是程序員的語言
也許你會(huì)問“所有的計(jì)算機(jī)語言不都是程序員使用的嗎?”,回答是斷然的“否”。我們考慮典型的非程序員的語言C O B O L和B A S I C。C O B O L的設(shè)計(jì)使程序員難以改變所編寫代碼的可靠性,甚至不能提高代碼的編寫速度。
然而C O B O L設(shè)計(jì)者的本意卻是打算使非程序員能讀程序(這是不大可能的事)。注意,這并不是攻擊C O B O L的優(yōu)點(diǎn),而是想指出,它沒有被設(shè)計(jì)成為程序員的理想語言。BASIC 的主要目的是允許非專業(yè)程序員在計(jì)算機(jī)上編程解決比較簡(jiǎn)單的問題。與其形成鮮明對(duì)照的是C 語言,由于程序生成、修改和現(xiàn)場(chǎng)測(cè)試自始至終均由真正的程序員進(jìn)行,因而它實(shí)現(xiàn)了程序員的期望:很少限制、很少?gòu)?qiáng)求、塊結(jié)構(gòu)、獨(dú)立的函數(shù)以及緊湊的關(guān)鍵字集合。用C語言編程,程序員可以獲得高效機(jī)器代碼,其效率幾乎接近匯編語言代碼。
C語言被程序員廣泛使用的另一個(gè)原因是可以用它代替匯編語言。匯編語言使用的匯編指令,是能夠在計(jì)算機(jī)上直接執(zhí)行的二進(jìn)制機(jī)器碼的符號(hào)表示。匯編語言的每個(gè)操作都對(duì)應(yīng)為計(jì)算機(jī)執(zhí)行的單一指令。雖然匯編語言給予程序員達(dá)到靈活性和效率的潛力,但開發(fā)和調(diào)試匯編語言程序的困難是難以忍受的。非結(jié)構(gòu)性使得匯編語言程序難于閱讀、改進(jìn)和維護(hù)。也許更重要的是,匯編語言程序不能在使用不同C P U的機(jī)器間移植。
最初,C語言被用于系統(tǒng)程序設(shè)計(jì)。一個(gè)“系統(tǒng)程序”是一大類程序的一部分,這一大類構(gòu)成了計(jì)算機(jī)操作系統(tǒng)及實(shí)用程序。通常被稱為系統(tǒng)程序的有:
• 操作系統(tǒng)。
• 翻譯程序。
• 編輯程序。
• 匯編程序。
• 編譯程序。
• 數(shù)據(jù)庫管理程序。
隨著C語言的普及,加之其可移植性和高效率,許多程序員用它設(shè)計(jì)各類程序。幾乎所有的計(jì)算機(jī)上都有C語言編譯程序,這使我們可以很少改動(dòng)甚至不加改動(dòng)地將為一種機(jī)器寫的C 語言源程序在另一種機(jī)器上編譯執(zhí)行??梢浦残怨?jié)省了時(shí)間和財(cái)力。
C語言不僅在速度和結(jié)構(gòu)上有它的優(yōu)勢(shì),而且每個(gè)C語言系統(tǒng)都提供了專門的函數(shù)庫,程序員可以根據(jù)不同需要對(duì)其進(jìn)行剪裁,以適應(yīng)各種程序的設(shè)計(jì)。由于它允許(更準(zhǔn)確地說是鼓勵(lì))分別編譯,所以C語言可使程序員方便地管理大型項(xiàng)目,限度地減少重復(fù)勞動(dòng)。
C語言通常稱為中級(jí)計(jì)算機(jī)語言。中級(jí)語言并沒有貶義,不意味著它功能差、難以使用、或者比B A S I C、P a s c a l那樣的高級(jí)語言原始,也不意味著它與匯編語言相似,會(huì)給使用者帶來類似的麻煩。C語言之所以被稱為中級(jí)語言,是因?yàn)樗迅呒?jí)語言的成分同匯編語言的功能結(jié)合起來了。表1 - 1表明了C語言在計(jì)算機(jī)語言中所處的地位。
作為中級(jí)語言,C允許對(duì)位、字節(jié)和地址這些計(jì)算機(jī)功能中的基本成分進(jìn)行操作。C語言程序非常容易移植??梢浦残员硎緸槟撤N計(jì)算機(jī)寫的軟件可以用到另一種機(jī)器上去。舉例來說,如果為蘋果機(jī)寫的一個(gè)程序能夠方便地改為可以在IBM PC 上運(yùn)行的程序,則稱為是可移植的。
所有的高級(jí)語言都支持?jǐn)?shù)據(jù)類型的概念。一個(gè)數(shù)據(jù)類型定義了一個(gè)變量的取值范圍和可在其上操作的一組運(yùn)算。常見的數(shù)據(jù)類型是整型、字符型和實(shí)數(shù)型。雖然C語言有五種基本數(shù)據(jù)類型,但與P a s c a l或A d a相比,它卻不是強(qiáng)類型語言。C程序允許幾乎所有的類型轉(zhuǎn)換。例如,字符型和整型數(shù)據(jù)能夠自由地混合在大多數(shù)表達(dá)式中進(jìn)行運(yùn)算。這在強(qiáng)類型高級(jí)語言中是不允許的。
C語言的另一個(gè)重要特點(diǎn)是它僅有3 2個(gè)關(guān)鍵字,這些關(guān)鍵字就是構(gòu)成C語言的命令。和IBM PC的B A S I C相比,后者包含的關(guān)鍵字達(dá)1 5 9個(gè)之多。
C語言是結(jié)構(gòu)化語言
雖然從嚴(yán)格的學(xué)術(shù)觀點(diǎn)上看,C語言是塊結(jié)構(gòu)(b l o c k - s t r u c t u r e d)語言,但是它還是常被稱為結(jié)構(gòu)化語言。這是因?yàn)樗诮Y(jié)構(gòu)上類似于A L G O L、P a s c a l和M o d u l a - 2(從技術(shù)上講,塊結(jié)構(gòu)語言允許在過程和函數(shù)中定義過程或函數(shù)。用這種方法,全局和局部的概念可以通過“作用域”規(guī)則加以擴(kuò)展,“作用域”管理變量和過程的“可見性”。因?yàn)镃語言不允許在函數(shù)中定義函數(shù),所以不能稱之為通常意義上的塊結(jié)構(gòu)語言)。
結(jié)構(gòu)化語言的顯著特征是代碼和數(shù)據(jù)的分離。這種語言能夠把執(zhí)行某個(gè)特殊任務(wù)的指令和數(shù)據(jù)從程序的其余部分分離出去、隱藏起來。獲得隔離的一個(gè)方法是調(diào)用使用局部(臨時(shí))變量的子程序。通過使用局部變量,我們能夠?qū)懗鰧?duì)程序其它部分沒有副作用的子程序。這使得編寫共享代碼段的程序變得十分簡(jiǎn)單。如果開發(fā)了一些分離很好的函數(shù),在引用時(shí)我們僅需要知道函數(shù)做什么,不必知道它如何做。切記:過度使用全局變量(可以被全部程序訪問的變量)會(huì)由于意外的副作用而在程序中引入錯(cuò)誤。
結(jié)構(gòu)化語言比非結(jié)構(gòu)化語言更易于程序設(shè)計(jì),用結(jié)構(gòu)化語言編寫的程序的清晰性使得它們更易于維護(hù)。這已是人們普遍接受的觀點(diǎn)了。C語言的主要結(jié)構(gòu)成分是函數(shù)C的獨(dú)立子程序。
在C語言中,函數(shù)是一種構(gòu)件(程序塊),是完成程序功能的基本構(gòu)件。函數(shù)允許一個(gè)程序的諸任務(wù)被分別定義和編碼,使程序模塊化??梢源_信,一個(gè)好的函數(shù)不僅能正確工作且不會(huì)對(duì)程序的其它部分產(chǎn)生副作用。
1.2.3 C語言是程序員的語言
也許你會(huì)問“所有的計(jì)算機(jī)語言不都是程序員使用的嗎?”,回答是斷然的“否”。我們考慮典型的非程序員的語言C O B O L和B A S I C。C O B O L的設(shè)計(jì)使程序員難以改變所編寫代碼的可靠性,甚至不能提高代碼的編寫速度。
然而C O B O L設(shè)計(jì)者的本意卻是打算使非程序員能讀程序(這是不大可能的事)。注意,這并不是攻擊C O B O L的優(yōu)點(diǎn),而是想指出,它沒有被設(shè)計(jì)成為程序員的理想語言。BASIC 的主要目的是允許非專業(yè)程序員在計(jì)算機(jī)上編程解決比較簡(jiǎn)單的問題。與其形成鮮明對(duì)照的是C 語言,由于程序生成、修改和現(xiàn)場(chǎng)測(cè)試自始至終均由真正的程序員進(jìn)行,因而它實(shí)現(xiàn)了程序員的期望:很少限制、很少?gòu)?qiáng)求、塊結(jié)構(gòu)、獨(dú)立的函數(shù)以及緊湊的關(guān)鍵字集合。用C語言編程,程序員可以獲得高效機(jī)器代碼,其效率幾乎接近匯編語言代碼。
C語言被程序員廣泛使用的另一個(gè)原因是可以用它代替匯編語言。匯編語言使用的匯編指令,是能夠在計(jì)算機(jī)上直接執(zhí)行的二進(jìn)制機(jī)器碼的符號(hào)表示。匯編語言的每個(gè)操作都對(duì)應(yīng)為計(jì)算機(jī)執(zhí)行的單一指令。雖然匯編語言給予程序員達(dá)到靈活性和效率的潛力,但開發(fā)和調(diào)試匯編語言程序的困難是難以忍受的。非結(jié)構(gòu)性使得匯編語言程序難于閱讀、改進(jìn)和維護(hù)。也許更重要的是,匯編語言程序不能在使用不同C P U的機(jī)器間移植。
最初,C語言被用于系統(tǒng)程序設(shè)計(jì)。一個(gè)“系統(tǒng)程序”是一大類程序的一部分,這一大類構(gòu)成了計(jì)算機(jī)操作系統(tǒng)及實(shí)用程序。通常被稱為系統(tǒng)程序的有:
• 操作系統(tǒng)。
• 翻譯程序。
• 編輯程序。
• 匯編程序。
• 編譯程序。
• 數(shù)據(jù)庫管理程序。
隨著C語言的普及,加之其可移植性和高效率,許多程序員用它設(shè)計(jì)各類程序。幾乎所有的計(jì)算機(jī)上都有C語言編譯程序,這使我們可以很少改動(dòng)甚至不加改動(dòng)地將為一種機(jī)器寫的C 語言源程序在另一種機(jī)器上編譯執(zhí)行??梢浦残怨?jié)省了時(shí)間和財(cái)力。
C語言不僅在速度和結(jié)構(gòu)上有它的優(yōu)勢(shì),而且每個(gè)C語言系統(tǒng)都提供了專門的函數(shù)庫,程序員可以根據(jù)不同需要對(duì)其進(jìn)行剪裁,以適應(yīng)各種程序的設(shè)計(jì)。由于它允許(更準(zhǔn)確地說是鼓勵(lì))分別編譯,所以C語言可使程序員方便地管理大型項(xiàng)目,限度地減少重復(fù)勞動(dòng)。