跳轉到內容

C++ 程式設計:C++ 程式碼

來自華夏公益教科書,開放書籍,開放世界

程式碼

[編輯 | 編輯原始碼]

程式碼是計算機用來解釋的一系列符號,以執行給定的目標。與自然語言一樣,程式碼是所有控制語言的約定和規則的結果。它允許以標準的、可編譯的方式實現專案。編寫正確的程式碼用於建立專案,這些專案充當自然語言的中間體,以表達含義和想法。理論上和實際上,這允許計算機程式解決任何明確定義的問題。

未定義行為

同樣重要的是要注意,語言標準將某些專案留作未定義。未定義的專案並不侷限於 C++ 語言,但如果它們產生不一致的結果,可能會讓不知情的初學者感到困惑。這些專案的未定義性質在需要使用多個編譯器的跨平臺開發中最為明顯,因為這些專案的具體實現是每個編譯器所做選擇的結果。

注意
我們將嘗試在提供資訊時提供相關資訊。請注意,在這樣做時,我們通常會將您指向您正在使用的編譯器的文件或指出更常用的編譯器的行為。

程式設計

[編輯 | 編輯原始碼]

程式設計的任務,雖然在執行中並不容易,但在目標上實際上相當簡單。程式設計師會設想或被分配一個特定的目標。目標通常以“我想要一個執行... *填空*...” 的形式提供。然後,程式設計師的工作就是想出一個“工作模型”(一個模型,可能包含一個或多個 演算法)。這個“工作模型”有點像程式將如何實現設定目標的想法。它讓程式設計師對要編寫的內容有了概念,以便將想法轉化為可執行的程式。

一旦程式設計師對程式需要採用什麼結構才能實現目標有了概念,他們就開始使用選定的 *程式語言 關鍵字*、*函式* 和 *語法* 實際編寫程式本身。他們編寫的程式碼實際上實現了程式,或使其執行必要的任務,因此有時被稱為“實現程式碼”。

什麼是程式?

[編輯 | 編輯原始碼]

重申定義,程式只是一系列以某種程式語言編寫的指令,告訴計算機該做什麼,以及通常如何做。典型使用者在計算機上執行的所有操作都由程式處理和控制。程式可以包含任何內容,從解決數學問題或傳送電子郵件的指令,到在影片遊戲中角色被射擊時的行為方式。計算機將從頭到尾逐行執行程式的指令。

程式型別

[編輯 | 編輯原始碼]

如今有各種各樣的程式用於各種目的。所有程式都是用某種形式的程式語言編寫的,C++ 可用於任何型別的應用程式。不同型別程式(也稱為軟體)的示例包括


Clipboard

待辦事項
更正示例以指示 C++ 語言的實際應用,如果可能,使用使用者可以檢查原始碼的專案。


作業系統
作業系統負責確保計算機上的所有內容都按應有的方式工作。它特別關心確保計算機的“硬體”(即磁碟驅動器、顯示卡和音效卡等)與計算機上的其他程式正確互動。Microsoft Windows 和 Linux 是 PC 作業系統的示例。一個用 C++ 編寫的開源作業系統,其原始碼可以在網上獲得,例如 Genode。
辦公程式
這是一個通用類別,用於收集允許您撰寫、檢視、列印或以其他方式顯示不同型別文件的程式。通常,這樣的“套件”包含一個用於撰寫信件或報告的文字處理程式、一個電子表格應用程式和一個某種形式的幻燈片演示建立者等等。流行的辦公套件示例包括 Microsoft Office 和 Apache OpenOffice,其原始碼可以在 OpenOffice.org 上找到。
網路瀏覽器和電子郵件客戶端
網路瀏覽器是一個程式,它允許您輸入網際網路地址,然後為您顯示該頁面。電子郵件客戶端是一個程式,它允許您在網路瀏覽器之外發送、接收和撰寫電子郵件。電子郵件客戶端通常也具有一定的網路瀏覽器功能,而某些網路瀏覽器則集成了電子郵件客戶端。著名的網路瀏覽器包括 Internet Explorer 和 Firefox,電子郵件客戶端包括 Microsoft Outlook 和 Thunderbird。大多數使用 C++ 程式設計,您可以訪問一些作為開源專案,例如 (http://www.mozilla.org/projects/firefox/) 將幫助您下載和編譯 Firefox。
音訊/影片軟體
這些型別的軟體包括媒體播放器、聲音錄製軟體、燒錄/翻錄軟體、DVD 播放器等。許多應用程式,例如 Microsoft 編寫的流行媒體播放器 Windows Media Player,都是音訊/影片軟體的示例。VLC 媒體播放器是一個開源媒體播放器的示例,其原始碼可在網上獲得。
電腦遊戲
有無數的軟體名稱,要麼是遊戲,要麼是旨在幫助玩遊戲的軟體。這個類別非常廣泛,無法深入討論所有不同型別的遊戲軟體,而不必建立另一本書!遊戲是電腦上最受歡迎的活動之一。

網路安全

網路安全軟體是現代計算機企業的關鍵組成部分。軟體和程式設計是允許加密個人、財務和其他重要敏感資訊型別的關鍵組成部分。網路安全軟體是保護使用者線上生活的重要組成部分。

開發軟體
開發軟體是專門用於程式設計的軟體。它包括用於在計算機語言中編寫程式的軟體(有時與記事本等文字編輯器一樣簡單)、用於檢查程式碼是否穩定和正確的軟體(稱為偵錯程式)以及用於將原始碼編譯成可執行程式的軟體(稱為編譯器)。通常,這三個單獨的程式會合併成一個更大的程式,稱為 IDE(整合開發環境)。對於所有可以想象的程式語言,都有各種各樣的 IDE。Windows 和 Linux 上流行的 C++ IDE 是 Code::Blocks IDE (免費和開源)。您將在本書中瞭解最多的軟體型別是開發軟體。

指令型別

[編輯 | 編輯原始碼]

如前所述,程式是用多種不同的語言編寫的,對於每種語言,用於告訴計算機執行特定命令的單詞和語句都不同。但是,無論使用什麼單詞和語句,幾乎每種程式語言都將包含完成以下任務的語句

輸入
輸入是指從鍵盤或滑鼠,有時是從另一個程式獲取資訊的行為。
輸出
輸出與輸入相反;它向計算機顯示器或其他裝置或程式提供資訊。
*數學*/*演算法*
所有計算機處理器(計算機的大腦)都具有執行基本數學計算的能力,並且每種程式語言都有一些方法可以告訴它這樣做。
測試
測試包括告訴計算機檢查某個條件,並在該條件為真或假時執行某些操作。條件語句是程式設計中最重要 的概念之一,所有語言都有一些測試條件的方法。
重複
重複執行某些操作,通常帶有某種變化。

信不信由你,這就是全部。你用過的所有程式,無論多麼複雜,都是由看起來或多或少像這些函式組成的。因此,描述程式設計的一種方式是將一個龐大而複雜的任務分解成越來越小的子任務,直到最後子任務變得足夠簡單,可以使用這些簡單的函式之一執行。

程式執行

[edit | edit source]

執行從主函式開始,它是任何(符合標準的)C++程式的入口點。我們將在介紹函式時介紹它。

執行控制或簡稱為控制,是指程式執行的過程和位置,它與程序式程式設計直接相關。在繼續學習的過程中,你會注意到控制的提及,因為它是一個必要的概念,可以解釋程式碼的執行順序及其由計算機的解釋。

核心庫與標準庫

[edit | edit source]

核心庫包含語言本身的基本構建塊。由 C++ 編譯器固有地理解的基本語句組成。這包括基本的迴圈結構,如 if..else、do..while 和 for.. 語句。建立和修改變數、宣告和呼叫函式以及執行基本算術的能力。核心庫不包含 I/O 功能。

The 標準庫是一組模組,透過使用庫或標頭檔案為語言新增擴充套件功能。輸入/輸出例程、高階數學和記憶體分配函式等功能都屬於此類。所有 C++ 編譯器都負責提供符合 ANSI/ISO C++ 指南 的標準庫函式。有關每個模組的更深入的理解將在本書的 標準 C 庫標準輸入/輸出流庫標準模板庫 (STL) 部分提供。


Clipboard

待辦事項
如果需要,請完成 C++11 擴充套件模組部分(在撰寫本文時,書中內容沒有 C++11,但有一些小的提及。可能建立一個子頁面 C++ Programming/Programming Languages/C++/Code/Standard Library 將此部分移至那裡(transwiki 這裡)並使每個模組成為該頁面的子頁面以利於導航。)


程式組織

[edit | edit source]

程式的指令如何寫出和儲存通常不是由程式語言決定的。打孔卡曾經很常見,但在大多數現代作業系統下,指令通常儲存為純文字檔案,可以使用任何文字編輯器進行編輯。這些檔案是組成程式的指令的來源,因此有時被稱為原始檔,但更嚴格的定義是原始碼

當提到原始碼或只是原始碼時,你只考慮包含程式碼的檔案,即構成函式(操作)的實際文字,供計算機執行。透過提到原始檔,你將這個概念擴充套件到了不僅包含組成程式的指令的檔案,還包括所有可以構建程式的原始檔案資源。The 檔案組織部分將涵蓋 C++ 程式設計中使用的不同檔案以及處理它們的最佳實踐。

關鍵字和識別符號

[edit | edit source]
Clipboard

待辦事項
完整關鍵字、說明符、修飾符、指令


識別符號是賦予變數、函式、物件等的名稱,以便在程式中引用它們。C++識別符號必須以字母或下劃線字元 "_" 開頭,後面可以是一系列字母、下劃線或數字。C++程式語言的關鍵字都不能用作識別符號。以連續下劃線開頭的識別符號保留供標頭檔案使用,或由編譯器用於特殊目的,例如名稱改編。

一些關鍵字用於直接控制編譯器的行為,這些關鍵字非常強大,必須謹慎使用,它們可能會對程式的編譯時間和執行速度產生重大影響。在 C++ 標準中,這些關鍵字被稱為說明符

建立自己的識別符號時必須特別注意,這將在 程式碼風格約定部分中介紹。

ISO C++ 關鍵字

[edit | edit source]

C++98 標準識別以下關鍵字

特定編譯器可能(在非標準相容模式下)也會將其他一些詞語視為關鍵字,包括 cdeclfarfortranhugeinterruptnearpascaltypeof。舊編譯器可能識別 overload 關鍵字,它是一個過時的詞語,已被從語言中刪除。

當前版本的 C++,稱為 C++11,添加了一些關鍵字

  • alignas
  • alignof
  • char16_t
  • char32_t
  • constexpr
  • decltype
  • noexcept
  • nullptr
  • static_assert
  • thread_local

C++11 還添加了兩個特殊詞語,在某些情況下它們的行為類似於關鍵字,但在大多數情況下可以作為普通識別符號使用

  • final
  • override

在編寫新程式碼時,將它們用作識別符號是一種不好的做法。

C++98 關鍵字 autodefaultdeleteusing 在 C++11 中有額外的或更改後的用法。

一些舊的 C++98 編譯器可能無法識別以下一些或所有關鍵字

  • typeid
  • typename
  • using
  • wchar_t
  • xor
  • xor_eq

C++ 保留識別符號

[edit | edit source]

一些“非標準”識別符號保留供不同用途使用,以避免供應商、庫建立者和使用者在命名識別符號時發生衝突。

保留識別符號包括帶兩個連續下劃線的關鍵字 (__)、所有以一個下劃線後跟一個大寫字母開頭的關鍵字,以及從 C 庫規範繼承的一些其他類別的保留識別符號。

在網際網路存檔 Wayback Machine 的存檔頁面中可以找到 C 保留識別符號列表:http://web.archive.org/web/20040209031039/http://oakroadsystems.com/tech/c-predef.htm#ReservedIdentifiers


Clipboard

待辦事項
列出這些 C 保留識別符號會很好,目前所有標準 C 庫函式都已經列出


原始碼

原始碼是人類語言和機器程式碼之間的中間環節。如前所述,它在一定程度上可以被人閱讀,但也可以被計算機解析(轉換)成機器程式碼。機器程式碼由一系列 1 和 0 表示,是計算機唯一可以直接理解和執行的程式碼。

在一個小型程式中,您最多可能只有幾十行程式碼,而在大型程式中,這個數字可能會擴充套件到數千甚至數百萬行。因此,有時將大量程式碼拆分成多個檔案更實際。這樣更容易閱讀,因為您可以逐段閱讀,而且還會縮短每個原始檔的編譯時間。編譯大量小型原始檔比編譯單個大型原始檔所需的時間少得多。

管理大小並不是拆分程式碼的唯一原因。通常,尤其是在大型團隊開發軟體時,會拆分原始碼。程式不是一個大型檔案,而是被分成單獨的檔案,每個單獨的檔案包含執行整個程式特定任務集的程式碼。這會建立一個稱為“模組化”的條件。模組化是一種允許一次更改、新增或刪除一部分原始碼的質量。這樣做的優點是可以讓許多人同時處理同一程式的不同方面,從而使程式開發速度更快、更流暢。大型專案的原始碼應始終以模組化為目標編寫。即使在處理小型或中型專案時,也應該養成以易於編輯和使用的程式碼編寫習慣。

C++ 原始碼區分大小寫。這意味著它區分大小寫字母,因此它將“hello”、“Hello”和“HeLlO”視為完全不同的東西。這一點很重要,請牢記並理解,將在編碼風格規範部分中進一步討論。

華夏公益教科書