當(dāng)前位置:首頁 > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > 編程的本質(zhì)是什么?程序是什么?
程序是什么?在編程的世界,我們平時(shí)所見到的程序,是指以某種邏輯組織起來的指令序列,通過這些指令序列達(dá)到一些特定的效果,一個(gè)可執(zhí)行程序呢,它的內(nèi)部是一系列計(jì)算機(jī)指令和數(shù)據(jù)的集合,它們都是二進(jìn)制形式的,通常的格式是ELF段的二進(jìn)制文件,CPU 可以直接看到,識(shí)別,但是,若是對(duì)于程序員來說呢,這些二進(jìn)制文件就顯得晦澀難懂,看得人頭皮發(fā)麻。
而在windons中呢,我們所說的程序,就是那些平時(shí)雙擊就可以直接運(yùn)行的程序了,他們不需要安裝,而是可以直接執(zhí)行,這樣的程序呢被稱為可執(zhí)行程序,英文名字是Executable Program,所以我們一般平時(shí)看到的exe文件呢就是可執(zhí)行程序名字的一個(gè)縮寫。在 Windows 下,可執(zhí)行程序的后綴一般有 .exe 和 .com(其中 .exe 比較常見);而在類 UNIX 系統(tǒng)(Linux、Mac OS 等操作系統(tǒng))下,可執(zhí)行程序并沒有特定的后綴,系統(tǒng)根據(jù)文件的頭部信息來判斷是否是可執(zhí)行程序,一般格式為ELF文件。
例如,在我們的電腦屏幕上輸出“hello world”,C語言的寫法為:
puts("hello world");或者printf("hello world");
二進(jìn)制的寫法為:
如果你是程序員,你可以感受一下,直接使用二進(jìn)制寫程序感覺是不是想撞墻?而在計(jì)算發(fā)展的初期,程序員就是使用這樣的二進(jìn)制指令來編寫程序的,因?yàn)樵谀莻(gè)年代還沒有編程語言。
直接使用二進(jìn)制指令編程對(duì)程序員來說簡(jiǎn)直是噩夢(mèng),尤其是當(dāng)程序比較大的時(shí)候,不但編寫麻煩,需要頻繁查詢指令手冊(cè),而且除錯(cuò)會(huì)異常苦惱,要直接面對(duì)一堆二進(jìn)制數(shù)據(jù),讓人眼花繚亂。另外,用二進(jìn)制指令編程步驟繁瑣,要考慮各種邊界情況和底層問題,開發(fā)效率十分低下。
這種情況下,這就逼得程序員開發(fā)出了編程語言,提高自己的生產(chǎn)力,例如匯編語言、C語言、C++、Java、Python、Go語言等,逐步提高開發(fā)效率。從此,C語言代碼由固定的詞匯按照固定的格式組織起來,簡(jiǎn)單直觀,便于程序員識(shí)別和理解,但是對(duì)于CPU,C語言代碼是什么東西?根本不認(rèn)識(shí)好吧!CPU只認(rèn)識(shí)一些二進(jìn)制形式的指令。所以呢!這個(gè)時(shí)候就需要這么一個(gè)工具,將C語言代碼轉(zhuǎn)換成CPU能夠識(shí)別的二進(jìn)制文件,也就是將代碼加工成 .exe 程序;這個(gè)工具是一個(gè)特殊的軟件,叫做編譯器(Compiler)。編譯器能夠識(shí)別代碼中的詞匯、句子以及各種特定的格式,并將他們轉(zhuǎn)換成計(jì)算機(jī)能夠識(shí)別的二進(jìn)制形式,這個(gè)過程稱為編譯英文是Compile。
編譯也可以理解為“翻譯”,它是一個(gè)復(fù)雜的過程,大致包括詞法分析、語法分析、語義分析、性能優(yōu)化、生成可執(zhí)行文件五個(gè)步驟,期間涉及到復(fù)雜的算法和硬件架構(gòu)。然后將人們寫的各種c語言或其他語言的語句,翻譯成系統(tǒng)才能夠理解的語句,進(jìn)一步進(jìn)行運(yùn)算。Windows 下常用的是微軟編譯器(cl.exr),它被集成在 Visual Studio 或 Visual C++ 中,一般不單獨(dú)使用;Linux 下常用的是 GUN 組織開發(fā)的 GCC,也叫GNU C Compile,很多 Linux 發(fā)行版都自帶 GCC編譯軟件。
你的代碼語法正確與否,編譯器說了才算,編譯器可以 100% 保證你的代碼從語法上講是正確的,因?yàn)槟呐掠幸稽c(diǎn)小小的錯(cuò)誤,編譯也不能通過,編譯器會(huì)告訴你哪里錯(cuò)了,那你就是錯(cuò)了,這樣以便于你對(duì)自己代碼的更改。