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