C語言之基本編程思想與基本概念掃盲

前言:C語言是包含了不少編程的基本思想,理解C可以有助於理解其餘高級語言,深入理解編程不少基本思想;這對新手入門是有不少好處的,正所謂磨刀不誤砍柴工,內功與基礎修煉紮實了,才能開始蓋高樓大廈。 這篇文字做爲讀書筆記摘錄了C Primer Plus這本經典C語言的內容,便於知識複習與分享。推薦書籍《C Primer Plus》

1章 初識C語言

1.1 C語言的起源

爲程序員設計開發的語言,有用的語言,程序員使用的一種編程工具。程序員


1.2 選擇C語言的理由

設計特性:自頂向下的規劃結構化編程模塊化設計編程

高效性:運行速度快,微調控能力(彙編語言才具備的能力);架構

可移植性:許多計算機體系結構均可以用C編譯器;可移植語言;框架

強大而靈活:編程語言

C編譯器的做用:就是把C語言代碼轉換成計算機內部指令的程序。編輯器

可移植性:不一樣的硬件,使用不一樣的機器語言,因爲架構體系的不一樣。ide

彙編語言:是爲特殊的中央處理單元CPU,設計的一系列內部指令,使用助記符表示。模塊化

面向程序員:許多任務用C來處理都很是簡潔,可是反面就是會容易犯莫名其妙的錯誤;函數

缺點:自由,可是必須承擔更多的責任;自由就必須時刻保持警戒;大量運算符,能夠編寫出讓人費解的代碼;工具


1.3 C語言的應用範圍

小型計算機UNIX系統)、微型計算機PC)、大型機(龐然大物);

C語言修改方便,移植到新型號的計算機中也沒什麼問題。

C++C的超集,C++C語言的基礎上,嫁接了面向對象的編程工具。

面向對象編程是一門哲學!經過對語言的建模來適應問題,而不是對問題建模來適應語言。

嵌入式編程的流行語言:許多現代化設備的微處理器

最重要的編程語言之一!


1.4 計算機能作什麼

瞭解計算機的工做原理

C語言編寫程序與運行程序時發生的事情之間有什麼聯繫?

計算機的組成1、中央處理單元(CPU)承擔大部分運算工做;2、隨機存取內存(RAM)是存儲程序和文件的工做區;3、永久內存存儲設備(機械硬盤、固態硬盤);4、各類外圍設備(鍵盤、鼠標、顯示器等等);

CPU的工做過程:來歸納就是,可以以驚人的速度從事枯燥的工做!工做過程簡單來說就是,從內存中獲取一條指令並執行,而後再從內存中獲取下一條指令並執行。CPU有本身的小工做區,由若干個寄存器構成。每一個寄存器均可以存儲一個數字。CPU可以理解的指令很是有限(這些指令的集合叫做指令集)。這些指令都至關具體。

有趣的知識:

  1. 存儲在計算機中全部內容都是數字。計算機以數字的形式存儲數字和字符(每一個字符都有一個數字碼),計算機載入寄存器中的指令也是以數字形式存儲的。

  2. 計算機程序最終必須以數字指令碼(機器語言)來表示。

計算機的工做原理就是,但願計算機作某事,就必須爲其提供特殊的指令列表(程序

),必須用計算機能直接明白的語言建立程序。這是一項繁瑣、乏味、費力的任務。


1.5 高級計算機語言和編譯器

高級編程語言以多種方式簡化了編程工做。首先,沒必要用數字碼表示指令;其次,使用的指令更貼近你如何想這個問題,能夠在更抽象的層次表達你的想法。

可是對計算機而言,高級指令就是一堆沒法理解的無用數據。編譯器在這個時候排上了用場。編譯器是把高級語言程序翻譯成計算機理解的機器語言指令集的程序。

程序員進行高級思惟活動,編譯器負責處理冗長乏味的細節工做。

不一樣CPU製造商使用的指令系統和編碼格式不一樣。使用合適的編譯器和編譯器集,即可把一種高級語言程序轉換成供不一樣類型CPU使用的機器語言程序。

高級語言以更抽象的方式描述行爲,不受限與特定的CPU或指令集。高級語言簡單易學,用高級語言編程比用機器語言編程容易得多。


1.6 語言標準


1.7 使用C語言的7個步驟

編程的7個步驟1、定義程序的目標;2、設計程序;3、編寫代碼;4、編譯;5、運行程序;6、測試和調試程序;7、維護和修改程序;

  1. 定義程序的目標:明確本身想作什麼,須要哪些信息,要進行哪些計算和控制,程序要報告什麼信息。這個過程不涉及具體的計算機語言,應該用通常術語來描述問題。

  2. 設計程序:對程序應該完成什麼任務有概念性的認知後,應該思考如何用程序來完成它。用戶界面應該是什麼樣的?如何組織程序?目標用戶是誰?準備花多長時間來完成這個程序?如何表示數據,用什麼方法處理數據,用一個合適的方式表示信息能夠更容易地設計程序和處理數據。再次強調用通常術語來描述問題,而不是用具體代碼。

  3. 編寫代碼:這個過程是真正使用C語言的地方,並且取決於編程環境。文本編輯器建立源代碼文件,使用C的註釋工具在源代碼中加入對代碼的解釋。

  4. 編譯:編譯的細節取決於編程的環境。從概念的角度,講解編譯發生了什麼事情。編譯把源代碼轉換成可執行代碼的程序。可執行代碼是用計算機的機器語言表示的代碼。不一樣的計算機使用不一樣的機器語言方案。編譯器還會檢查C語言程序是否有效。若是發現錯誤就不生成可執行文件而且報錯,並生成錯誤信息或警告信息。

  5. 運行程序:

  6. 測試和調試程序:查找和修復程序錯誤的過程叫調試。

  7. 維護和修改代碼

說明:養成先規劃再動手編寫代碼的好習慣,用筆和紙記錄下程序的目標和設計框架。這樣在編寫代碼的過程當中會更加駕輕就熟、條例清晰。

1.8 編程機制源代碼文件 目標代碼(中間代碼)-->目標代碼文件,目標文件、中間文件 啓動代碼--> 庫函數(目標代碼)-->庫文件 -->

C語言編寫程序時,編寫的內容被儲存在文本文件中,該文件被稱爲源代碼文件source code file),源代碼文件以.c結尾。基本名.擴展名->這樣的組合就是文件名。


C編程的基本策略是,用程序把源代碼文件轉換爲可執行文件(可直接運行的機器語言代碼)。C實現經過編譯連接兩個步驟來完成這個過程。分而治之的方法方便對程序進行模塊化。

過程:編譯器把源代碼轉換成中間代碼,連接器把中間代碼和其餘代碼合併,生成可執行文件。能夠獨立編譯單獨模塊,稍後再用連接器合併已編譯的模塊。若是隻更改某個模塊,沒必要所以從新編譯其餘模塊。連接器還能夠將已經編寫的程序和預編譯的庫代碼合併。

中間文件有多種形式。這裏描述的是最廣泛的一種形式,即把源代碼轉換爲機器語言代碼,並把結果放在目標代碼文件中。目標文件(目標代碼文件)存儲的是編譯器翻譯的源代碼,雖然目標文件中包含了機器語言代碼,但並不能直接運行該文件,這還不是完整的程序。

目標代碼文件缺少啓動代碼。啓動代碼充當着程序和操做系統之間的接口。啓動代碼因爲操做系統的不一樣而不一樣。

並且目標代碼還缺乏庫函數。幾乎全部的C程序都要使用C標準庫中的函數。這些庫函數真正的代碼被存儲在一個稱爲的文件中。庫文件中有許多函數的目標代碼。

目標文件和可執行文件都是由機器語言指令組成的。目標文件只包含編譯器爲你編寫的代碼翻譯的機器語言代碼,可執行文件中還包含你編寫的程序中使用的庫函數和啓動代碼的機器代碼。

有些系統中,編譯器會自動啓動連接器。用戶只須要給出編譯命令便可。

有些系統中,必須分別運行編譯程序和連接程序。


1.8.1 Unix系統

可執行文件的擴展名.out

編譯命令是cc

編譯器會建立一個與源代碼基本名相同的目標代碼文件,擴展名是.o

可是一旦連接器生成了完整的可執行文件,就會刪除.o目標代碼文件。

若是原始程序有多個源代碼文件,則保留目標代碼文件。後面學到多文件程序時,這樣作的好處你就會明白。

1.8.2 GNU編譯器集合和LLVM項目

GNU項目始於1987年是一個開發大量免費UNIX軟件的集合(GNU的意思是GNU’s Not UNIX,即GNU不是UNIX)。

GNU編譯器集合->GCC,其中包含 GCC C編譯器是該項目的產品之一。

GCC有各類版本以適應不一樣硬件平臺和操做系統。用gcc命令即可以調用GCC C編譯器。許多使用gcc的系統都用cc做爲gcc的別名。

LLVM 項目是與編譯器相關的開源軟件的集合。

各系統都使用cc別名來代替gccclang命令。

1.8.3 Linux系統

Linux是一個開源、流行、相似於UNIX操做系統,可在不一樣平臺上(PCMAC)上運行。準備C程序是,要使用GNU提供的GCC 公共域C編譯器。

安裝Linux時,可選擇是否安裝GCC,若是以前沒有安裝GCC,則必須安裝。安裝過程當中會將cc做爲gcc的別名。在命令行中使用cc來代替gcc

1.8.4 PC的命令行編譯器

C編譯器不是標準Windows軟件包的一部分,所以須要從別處獲取並安裝C編譯器。能夠從網上免費下載CygwinMinGW。這樣能夠再PC上經過命令行使用GCC編譯器。

1.8.5 集成開發環境(Windows

利用集成開發環境IDE能夠快速開發C程序。IDE都內置了用於編寫C程序的編輯器。

初次接觸IDE環境可能使人望而生畏,由於它提供多個目標(target),即運行程序的多種環境。例如IDE提供了32Windows程序,64Windows程序,動態連接庫DLL等。許多目標都涉及Windows圖形界面。要管理這些選擇,一般要先建立一個項目(project),以便稍後在其中添加待使用的源代碼文件名。

1.9 小結

C是強大而簡潔的編程語言。C語言更容易從一個系統移植到另外一個系統。

C編譯型語言C編譯器和連接器把C語言源代碼轉換成可執行代碼的程序。

相關文章
相關標籤/搜索