c語言是2023年由貝爾實驗室的兩名科學家丹尼斯·里奇和肯·湯普遜在b語言基礎上發明的一種高階語言,以實用為目標。隨著計算機的發展,其他的實用語言已經被丟在角落,只有c仍然是主流語言,並且是首選的程式語言之一。
它的長盛不衰必定不是偶然,而是它本身的優點的必然結果。
1.其設計理念讓使用者更輕鬆的完成自頂向下的規劃、結構化程式設計和模組化設計,因此更易懂、更可靠。
2.c語言具有高效性。充分利用計算機優勢,程式緊湊,執行速度快(具有組合語言才具有的微調控能力,根據具體情況微調程式獲得最大的執行速度或者最有效的使用記憶體)。
3.可移植性。在某一系統中編寫的c程式直接經過少許修改(簡單修改標頭檔案中少許項)或者不用修改就可以在其他系統上執行。大部分語言都想成為可移植語言,可惜只有c語言是其中的佼佼者,絕大部分的計算機結構(除針對硬體裝置或者某些作業系統特殊功能)以及大部分計算機(如unix,windows)都可以使用c編譯器(針對某個系統)。
4.強大而靈活。許多編譯器直譯器還有unix作業系統均由c語言編寫。c語言還慎入到許多其他的領域,解決眾多物理數學問題。
5.面向程式設計師。與現在許多物件導向的程式語言不同,c語言是為了滿足程式設計師而設計的。程式設計師可以利用c訪問硬體、操控記憶體中的位。並且c語言有豐富運算子,能讓程式設計師簡潔的表達自己的意圖。但是相比於c++,c語言的限制更多,程式設計師可能會經常犯一些莫名其妙的錯誤。
1.c語言在指標有關方向的程式設計錯誤往往難以察覺。
2.c語言中有大量複雜運算子,寫出的**或許能夠使人極為費解。
在學c語言之前,我們一定了解過機器語言。
機器語言才是機器能夠讀懂的語言,是由無數個0與1構成的。通常計算機進行運作,就是執行乙個個的指令集,這些指令也是以數字的方式儲存的。在最早的時候,我們為了寫出這樣的指令來讓計算機為我們工作,就必須用計算機能懂的機器語言來建立程式。
這是一項十分繁雜艱苦的工作,時至今日,我們已經不再必須使用機器語言了,僅僅靠我們可以理解的語言便可以寫出這樣的指令集,這種語言就是高階組合語言。
當然,並不是隨著時間的流逝,機器逐漸讀懂了組合語言,而是我們終於寫出了一種程式,可以讓我們寫的組合語言轉換為機器可以看懂的機器語言,這就是——編譯器。
使用合適的編譯器或者編譯器集,我們就可以把就可以把一種高階語言程式轉換成供各種不同型別的cpu使用的機器語言程式。
我們使用c語言編寫程式時,編寫的內容被儲存在文字檔案(不是字處理檔案,否則會使用.txt拓展名)中,該檔案被稱為源**檔案,大部分c系統要求這種檔案以.c結尾(即chengxu.c結構,基本名.拓展名)。
c程式設計的基本策略是,將程式源**轉換成可執行檔案。這其中的轉換需要通過編譯和鏈結來完成這一過程。
編譯器:將源**轉化成中間**,放在目標**檔案(目標檔案,拓展名.obj)中。
中間**有多種形式,最常見的是機器語言**。雖然已經轉換完成,但是計算機卻不能執行。因為此時依舊是源**,缺少必要程式,還不是乙個完整的程式。鏈結器:將中間**、系統的標準啟動**與庫**合併,生成可執行檔案(拓展名.exe)。這裡的必要程式就是啟動**與庫函式。
啟動**充當程式與作業系統之間的介面。系統不同,處理程式的方式便不同,所以不同系統的啟動**就不一樣。
庫函式被包含在庫檔案當中,一般是寫在程式最前端的標頭檔案。
對於庫**,鏈結器只會將程式中需要的庫函式**提取出來。若在編寫程式時未使用機器特定的程式設計技術仍想要它的運**況在任何實現中相同,我們就需要同乙個標準。
語言標準與標準庫、標準庫函式有關。(看不太明白,不太了解,希望大神補充!)
有c90、c99、c11標準幾種。
編譯原理概述
一 編譯過程分析 編譯軟體讀取源程式 字元流 對之進行詞法和語法的分析,將高階語言指令轉換為功能等效的彙編 再由匯程式設計序轉換為機器語言,並按照作業系統對可執行檔案格式的要求鏈結生成可執行程式.二 編譯流程表 c源程式 c檔案 編輯器 預處理過程 c檔案 編譯 優化過程 s或.asm檔案 編譯器 ...
編譯原理概述
計算機不能直接理解 高階語言 只能直接理解 機器語言 所以必須要把高階語言 翻譯 成機器語言,計算機才能執行高階語言編寫的程式。我們可以粗略地把程式語言分為兩類 編譯型語言 和解釋型語言 常用的c c pascal和最近流行的go語言都是編譯型語言,而python ruby等則是解釋型語言,解釋型語...
編譯原理概述
編譯程式的工作過程 編譯程式的結構 編譯器的自舉和移植 高階語言轉換為可執行語言的過程 以gcc編譯器為例 原始檔為hello.c 步驟一 預處理。將原始檔hello.c預處理成hello.i。該步是將 include中包含的標頭檔案匯入到原始檔中。命令是gcc e hello.c 步驟二 編譯。將...