編寫一個(gè)簡(jiǎn)單的C語(yǔ)言程序(編寫一個(gè)簡(jiǎn)單的c語(yǔ)言程序,使得在屏幕上顯示)
作為一名以Java為主的開發(fā)人員,深感不理解操作系統(tǒng)底層原理的痛苦,為了能更好掌握操作系統(tǒng)的相關(guān)知識(shí)點(diǎn),因此我發(fā)自內(nèi)心決定結(jié)合實(shí)踐重學(xué)C語(yǔ)言這門編程語(yǔ)言。
重學(xué)C語(yǔ)言的第一個(gè)步驟,我決定從這個(gè)pun.c簡(jiǎn)單的例子入手,具體代碼如下:
#include <stdio.h>int main(void) { printf("To C,or not to C: that is a question.n"); return 0;}
當(dāng)你讀到我的文章且看到這個(gè)例子的時(shí)候,我不想讓你心里抱著以為這個(gè)例子簡(jiǎn)單的心態(tài)而使你錯(cuò)過(guò)重要的信息以及對(duì)忽視這個(gè)例子背后所蘊(yùn)藏的魅力。接下來(lái)讓我來(lái)詳細(xì)分析這個(gè)例子,讓你更深入理解它。
一、代碼解析:
1 #include<stdio.h> 表示C語(yǔ)言標(biāo)準(zhǔn)輸入輸出相關(guān)信息
2 main方法前面的int 表示main方法執(zhí)行完成后返回的值的數(shù)據(jù)類型為int
3 main方法中void 表示形式參數(shù)類型無(wú),用void關(guān)鍵字來(lái)表示
4 這個(gè)main方法代表的是主程序,也是C語(yǔ)言執(zhí)行的入口
5 main方法內(nèi)部信息表示的是可執(zhí)行的代碼內(nèi)容
6 main方法中第一行是調(diào)用printf函數(shù)將目標(biāo)信息打印出來(lái),n表示目標(biāo)信息輸出后進(jìn)行換行
7 printf函數(shù)來(lái)自標(biāo)準(zhǔn)輸入輸出庫(kù){<stdio.h>}中
8 第二行代碼表示執(zhí)行結(jié)束后向操作系統(tǒng)返回值為0
二、程序編譯和鏈接
假設(shè)我們?cè)赩isual Studio編輯器上編寫完成程序后,運(yùn)行只需要按住快捷鍵Ctrl F5就會(huì)在顯示控制臺(tái)中打印printf函數(shù)中的內(nèi)容。雖然這么簡(jiǎn)單的動(dòng)作,但是卻還要經(jīng)歷很多看不見的步驟才能看見對(duì)應(yīng)的結(jié)果。那具體是什么步驟呢?我來(lái)詳細(xì)分析一下:
1 生成一個(gè)含有上述程序代碼名為pun.c的文件
2 把程序轉(zhuǎn)換為機(jī)器可以執(zhí)行的形式
2.1 預(yù)處理
(1)把程序移交給預(yù)處理器【preprocessor】進(jìn)行處理
(2)預(yù)處理器執(zhí)行以#開頭的命令,預(yù)處理器可以對(duì)程序進(jìn)行修改或新增一些內(nèi)容
2.2 編譯
(1)被預(yù)處理器修改后的程序被放到編譯器【compiler】
(2)編譯器會(huì)將程序編譯成機(jī)器代碼
2.3 鏈接
(1)鏈接器【linker】將由編譯器生成的機(jī)器代碼和其它附加代碼整合在一起,產(chǎn)生最終可以執(zhí)行的程序
(2)附加代碼主要是程序中使用到庫(kù)函數(shù),如上述代碼例子用到printf函數(shù)
3 語(yǔ)句
語(yǔ)句是程序運(yùn)行時(shí)執(zhí)行的命令。在pun.c文件中,用到了兩種語(yǔ)句,分別是函數(shù)調(diào)用語(yǔ)句和返回語(yǔ)句。此外C語(yǔ)言要求在每個(gè)語(yǔ)句的末尾必須以分號(hào)結(jié)束
編譯和鏈接這幾個(gè)步驟往往是自動(dòng)實(shí)現(xiàn)的,實(shí)際上,預(yù)處理器一般是和編譯器集成在一起,導(dǎo)致我們無(wú)法肉眼看到它們?cè)诠ぷ?。在?shí)際的開發(fā)過(guò)程中,根據(jù)編譯器和操作系統(tǒng)的不同,編譯和鏈接所需要的命令也許是多種多樣的。在UNIX或Linux操作系統(tǒng)中自帶有cc編輯器,因此我們可以使用cc編譯器對(duì)pun.c程序進(jìn)行編譯和鏈接。具體的操作如:
cc pun.c
在終端或者命令行窗口中執(zhí)行cc pun.ch后,在當(dāng)前的目錄下,我們可以看到生成a.out文件,這個(gè)文件就是操作系統(tǒng)自動(dòng)進(jìn)行鏈接操作而生成的默認(rèn)文件。cc編譯器有許多的選項(xiàng),其中一個(gè)就是-o,-o表明將cc編譯器會(huì)將預(yù)編譯和鏈接的時(shí)候可以指定生成文件的名稱
對(duì)gcc編譯器,也可以將pun.c進(jìn)行預(yù)編譯和鏈接,生成對(duì)應(yīng).out文件,操作命令如下:
gcc pun.c
gcc編譯器也可以通過(guò)參數(shù)-o生成指定的文件
gcc -o pun.h pun.c
到此為止,通過(guò)對(duì)一個(gè)簡(jiǎn)單的C語(yǔ)言程序的分析,讓我們了解到C語(yǔ)言代碼的簡(jiǎn)單布局和組成部分所代表的含義。此外還明白了從編寫程序到執(zhí)行輸出目標(biāo)信息所經(jīng)歷的步驟。
請(qǐng)關(guān)注我,讓我們共同進(jìn)步罷!