計算機系統是由軟體跟硬體組合而成的。
源碼程式基本上是由一個值 0 和 1 所組成的,這些0和1在電腦裡稱做一個位元(bit),8個bit會組成一個位元組(byte)。
以我們最常見到的Hello World程式碼而言,該文件即是由一堆byte所組成的,而這些我們眼中的文字,轉換到電腦語言就是經由ASCII code 轉換而成的,而至於整體的程式意思還有是哪種變數,則需要依靠上下文才能夠做判斷。
C語言得起源於1969年~1973年被創建,定義了相當多的C語言的標準規定和函式庫,即所謂的C語言標準函式庫。
C語言雖然說很成功,但同樣也被說為有缺陷的程式,C語言和Unix系統有相當大的關連,Unix系統為一種電腦作業系統,也是與C語言一樣為同一個實驗室所創建;C語言也相對來說很簡單,沒有冗贅的設計,易於學習跟移植至其他系統上;C語言為為了寫Unix而創造,因此他們也很容易被其他人拿來寫程式,且相當適合用於寫應用程式。
至於他的缺點則為缺乏相當有用的抽象類別、class等等的支援,但在C++和Java這類的新程式上以可以解決這些問題。
程式轉換
C語言為人類可以看懂得高階語言,需要經過轉換才能改成機器所能看懂得低階語言;基本上整個的程式編譯過程分為以下幾段:
源程式碼 → 被修改過的程式碼 → 匯編程式 → 可重定位程式 (Relocatable Object Program) → 可執行程式
源程式碼 .cpp
↓ 預處理階段 : cpp根據 # 開頭的文件修改原本的C語言程式,譬如 #include <stdio.h> 會將原本需要用到的stdio.h內容直接加入cpp文件當中,修改成另外一個程式。
修改過後的程式碼 .i
↓ 編譯階段 :編譯器將C語言匯編成低階的機器語言,這邊算是將所有不同程式語言編 譯成一樣程式的地方。
匯編程式 .s
↓ 匯編階段 :將程式碼編譯成二進位的機器指令碼,這邊就是完全0和1的世界,不像 編譯完還有字符可以做判斷。
可重定位程式 .o
↓ 鏈接階段 :調用printf 程式碼並和可重定位程式合併,最後將程式變為一個可以加 載到內存內的程式,並可以備系統執行。
可執行程式
________________
GCC
由GNU開發出來得一個慈善開源項目,為GNU工具鏈的一環,其C code的編譯器具有相當優量的跨平台編譯功能。
_________________
為甚麼我們需要了解編譯系統?
●因為我們可以更有效的呼叫適合的函數,以此優化我們的程式效能。
●了解Link Error
●避免安全漏洞 (For Example: 緩衝區溢出)
沒有留言:
張貼留言