C++ 程式設計:程式語言簡介
最基本來說,"程式語言"是人類(程式設計師)與計算機之間的一種交流方式。程式設計師使用這種交流方式來向計算機發出指令。這些指令被稱為“程式”。
就像我們用來互相交流的眾多自然語言一樣,程式設計師可以使用多種語言來與計算機交流。每種程式語言都有自己的一套單詞和規則,稱為該語言的語法。如果你要編寫一個程式,就必須遵循你所使用語言的語法,否則你就不會被理解。
程式語言通常可以分為兩類:低階語言和高階語言,這兩個概念將被介紹給你,以及它們與 C++ 的關係。

計算機“語言”中較低階的層次是
機器碼(也稱為二進位制)是低階語言的最低形式。機器碼由一串 0 和 1 組成,它們組合在一起形成計算機可以執行的有意義的指令。如果你檢視一頁二進位制程式碼,就會明白為什麼二進位制程式碼永遠不會成為編寫程式的實用選擇;什麼樣的人才能記住一堆 1 和 0 的字串意味著什麼呢?
組合語言(也稱為 ASM),在從低階到高階的尺度上,僅僅比機器碼高一級。它是計算機執行的機器語言指令的人類可讀翻譯。例如,程式設計師不是透過二進位制表示(0 和 1)來引用處理器指令,而是使用更便於記憶(助記符)的形式來引用這些指令。這些助記符通常是字母的簡短集合,象徵著相應指令的動作,例如“ADD”表示加法,“MOV”表示將值從一個地方移動到另一個地方。
你無需瞭解組合語言即可用 C++ 程式設計,但瞭解一些“幕後”情況會有所幫助。學習組合語言還將使你作為程式設計師能夠擁有更多控制權,並幫助你在除錯和理解程式碼時更有幫助。
使用高階語言格式編寫程式的優勢遠遠超過任何缺點,由於大多數程式設計任務的規模和複雜性,這些優勢包括
- 高階程式結構:迴圈、函式和物件在低階語言中都具有有限的可用性,因為它們的存在本身就被認為是“高階”特性;也就是說,每個結構元素都必須進一步翻譯成低階語言。
- 可移植性:高階程式可以在不同的計算機上執行,幾乎無需修改或無需修改。低階程式通常使用僅在某些處理器上可用的專用函式,必須重寫才能在另一臺計算機上執行。
- 易用性:在組合語言中需要許多行程式碼才能完成的任務,可以使用高階程式語言中的庫函式呼叫簡化為幾行程式碼。例如,Java 是一種高階程式語言,它能夠用大約五行程式碼繪製一個功能視窗,而等效的組合語言至少需要四倍於此的程式碼量。
高階語言用更少的程式碼做更多的事情,儘管有時會犧牲效能,並且程式設計師的自由度也會降低。它們還試圖使用英語單詞的形式,這些形式可以被大多數沒有程式設計經驗的人閱讀和理解。用這些語言之一編寫的程式有時被稱為“人類可讀程式碼”。總的來說,抽象使得學習程式語言更容易。
沒有一種程式語言是用人們所說的像“純英語”這樣的自然語言編寫的(儘管 BASIC 和 COBOL 接近,而且有人正在努力在奧斯摩sian 協會的純英語編譯器和整合開發環境中實現這一點,該環境完全用純英語編寫,那麼純英語的定義就成了一個可以討論的問題)。無論如何,由於這種對書面表達的縮減和控制的必要性,導致了程式語言的使用(構造和形式語言),程式的文字有時被稱為“程式碼”,更具體地被稱為“原始碼”。在本書的程式碼部分中對此進行了更詳細的討論。
需要記住的是,雖然一些單詞(指令)是英文的(主要為了方便),但使用的語言是不同的(通常有充分的理由,否則有人會創造一種新的程式語言),除此之外,以上段落的其餘部分可能只有在你開始構建解析器、語言和編譯器時才重要。語言的級別越高,它就越努力地透過支援程式碼的可移植性和透過增加表示式和結構的複雜性來提高人類的可理解性,來解決對硬體(CPU、協處理器、暫存器數量等)的抽象問題。
請記住,這種分類方案正在不斷發展。C++ 仍然被認為是一種高階語言,但隨著新語言(Java、C#、Ruby 等)的出現,C++ 開始被歸類為像 C 這樣的低階語言。
由於計算機只能理解機器碼,因此人類可讀程式碼必須被解釋或翻譯成機器碼。
一個直譯器是一個程式(通常用更低階的語言編寫),它逐個解釋程式的指令,將其轉換成要由直譯器在執行時執行的命令。通常每個指令包含一行文字,或者提供其他明確的方式來區分每個指令,並且程式必須在每次執行時重新解釋。
一個編譯器是一個用於將原始碼逐個指令翻譯成機器碼的程式。翻譯成機器碼可能涉及將編譯器理解的一個指令拆分成多個機器指令。指令只翻譯一次,之後機器就可以直接理解和執行這些指令,無論何時被指示執行。本書的編譯器部分對 C++ 編譯器進行了完整的介紹。
用於指示計算機的工具可能有所不同,但是無論使用哪些語句,幾乎每種程式語言都將支援能夠完成以下操作的結構
- 輸入
- 輸入是指從鍵盤、滑鼠或有時是其他程式等裝置獲取資訊的行為。
- 輸出
- 輸出與輸入相反;它向計算機顯示器或其他顯示裝置或程式提供資訊。
- 數學/演算法
- 所有計算機處理器(計算機的大腦)都能夠執行基本的數學運算,而且每種程式語言都有一種方法可以告訴它執行這些運算。
- 測試
- 測試包括告訴計算機檢查某個條件,並在該條件為真或假時執行某些操作。條件語句是程式設計中最重要的概念之一,所有語言都有一些測試條件的方法。
- 重複
- 重複執行某些操作,通常會有一些變化。
對 C++ 語言結構的進一步考察和分析在本書的語句部分提供。
信不信由你,這就是全部內容。你使用過的每一個程式,無論它多麼簡單或複雜,都是由函式組成的,這些函式或多或少地像這些函式一樣工作。因此,描述計算機程式設計的一種方法是將一個大型複雜的任務分解成越來越小的子任務,直到最終每個子任務都足夠簡單,可以用這些函式之一執行。
C++ 主要編譯而不是解釋(有一些 C++ 直譯器),然後在稍後“執行”。儘管這看起來可能很複雜,但你將在後面看到它是多麼容易。
正如我們在C++ 簡介章節中所見,C++ 從 C 語言演變而來,並添加了一些抽象層級(因此我們可以正確地說 C++ 的級別比 C 更高)。 我們將在本書的程式設計正規化章節中學習這些差異的具體細節,對於那些已經瞭解其他語言的人來說,應該看看程式語言比較章節。