C語(yǔ)言是一門(mén)面向過(guò)程的、抽象化的通用程序設(shè)計(jì)語(yǔ)言,廣泛應(yīng)用于底層開(kāi)發(fā)。C語(yǔ)言能以簡(jiǎn)易的方式編譯、處理低級(jí)存儲(chǔ)器。C語(yǔ)言是僅產(chǎn)生少量的機(jī)器語(yǔ)言以及不需要任何運(yùn)行環(huán)境支持便能運(yùn)行的高效率程序設(shè)計(jì)語(yǔ)言。盡管C語(yǔ)言提供了許多低級(jí)處理的功能,但仍然保持著跨平臺(tái)的特性,以一個(gè)標(biāo)準(zhǔn)規(guī)格寫(xiě)出的C語(yǔ)言程序可在包括類(lèi)似嵌入式處理器以及超級(jí)計(jì)算機(jī)等作業(yè)平臺(tái)的許多計(jì)算機(jī)平臺(tái)上進(jìn)行編譯。
C語(yǔ)言,大部分同學(xué)大一的時(shí)候接觸的編譯語(yǔ)言,也是首先接觸的語(yǔ)言,很多人在學(xué)習(xí)的時(shí)候都會(huì)有些迷茫,即使現(xiàn)在已經(jīng)學(xué)得七七八八了,還是在寫(xiě)項(xiàng)目的時(shí)候有很多的問(wèn)題。如果你以前從來(lái)沒(méi)有接觸過(guò)任何的編程語(yǔ)言,那么你則需要學(xué)習(xí)一下一個(gè)拆分的邏輯思維。當(dāng)我們想要寫(xiě)一個(gè)項(xiàng)目或者軟件的時(shí)候,我們需要把這個(gè)整體拆分為7個(gè)步驟,這樣也會(huì)讓你的思路看起來(lái)更有條理。
進(jìn)階編譯之路
當(dāng)然啦,這是完美的狀態(tài)。然而在實(shí)際操作中,并且是在較大的項(xiàng)目中,你可能需要做一些反復(fù)工作,用后一步驟所了解到的內(nèi)容來(lái)改進(jìn)前一個(gè)步驟。
第1步: 定義程序目標(biāo)
當(dāng)你在開(kāi)始寫(xiě)程序之前,你應(yīng)對(duì)希望程序要做什么有一個(gè)清晰的想法??紤]程序需要的信息,程序需要進(jìn)行的計(jì)算和操作,以及程序應(yīng)該向你報(bào)告的信息。在這一規(guī)劃階段,你應(yīng)該用一般概念來(lái)考慮問(wèn)題,而不是一些具體的計(jì)算機(jī)語(yǔ)言術(shù)語(yǔ)來(lái)考慮。簡(jiǎn)單來(lái)說(shuō),我們所要思考的就是,這個(gè)程序是用來(lái)做什么的。
怎么定義好呢
第2步: 設(shè)計(jì)程序
當(dāng)你在對(duì)程序需要完成的事情有一個(gè)概念性的認(rèn)識(shí)后,你就應(yīng)該決定程序要如何完成它,用戶(hù)界面應(yīng)該是怎么樣的,程序應(yīng)該如何組織,目標(biāo)用戶(hù)是誰(shuí),你有多長(zhǎng)的時(shí)間來(lái)完成實(shí)現(xiàn)這個(gè)程序等等。
這個(gè)部分其實(shí)就像寫(xiě)作文一樣,當(dāng)你想好要寫(xiě)什么題材的文章之后,接下來(lái)就要列出你文章中的大綱,需要幾個(gè)段落,需要用到什么手法,每個(gè)段落寫(xiě)的是什么內(nèi)容,一共有多少時(shí)間來(lái)給你完成這篇文章。把這些內(nèi)容規(guī)劃出來(lái)列成大綱,然后依次實(shí)現(xiàn)就可以了。
第3步: 編寫(xiě)代碼
在程序有了清晰的設(shè)計(jì)后,就可以通過(guò)編寫(xiě)代碼來(lái)實(shí)現(xiàn)它了。也就是說(shuō),將你的設(shè)計(jì)構(gòu)思轉(zhuǎn)變?yōu)?C 語(yǔ)言。這里是你真正需要使用 C 知識(shí)的地方。你可以在紙上勾畫(huà)你的想法,但必須將代碼輸入計(jì)算機(jī)。一般來(lái)說(shuō),需要使用文本編輯器來(lái)創(chuàng)建一種稱(chēng)為源代碼的文件,該文件包含你的程序設(shè)計(jì)的的 C 實(shí)現(xiàn)形式。
例:比如要實(shí)現(xiàn)在屏幕上實(shí)現(xiàn)輸出 helloworld!
一個(gè)程序
這是一個(gè)基礎(chǔ)的C語(yǔ)言程序,其作用就是在屏幕上輸出一句helloworld!。
第4步:編譯
下一個(gè)步驟是編譯源代碼。不過(guò),編譯細(xì)節(jié)取決于編程環(huán)境,下面很快就會(huì)看到一些常見(jiàn)的環(huán)境,讓我們先對(duì)要做的事情有一個(gè)一般性的了解。
前面講過(guò),編譯器是一個(gè)程序,其工作是將源代碼轉(zhuǎn)換為可執(zhí)行代碼??蓤?zhí)行代碼是用計(jì)算機(jī)的機(jī)器語(yǔ)言表示的代碼。這種語(yǔ)言是由數(shù)字代碼表示的詳細(xì)指令組成。C 編譯器用來(lái)將 C 語(yǔ)言轉(zhuǎn)換成機(jī)器語(yǔ)言。C 編譯器還從 C 的庫(kù)中向程序加入代碼。庫(kù)中包括著許多標(biāo)準(zhǔn)例程供你使用,例如 printf和scanf。結(jié)果是,形成一個(gè)包含計(jì)算機(jī)可以理解的代碼并且你能夠運(yùn)行的可執(zhí)行文件。
編譯器還檢查你的程序是否為有效的 C 語(yǔ)言程序。如果編譯器發(fā)現(xiàn)錯(cuò)誤,就將錯(cuò)誤報(bào)告給你,而且不生成可執(zhí)行文件。理解編譯器的報(bào)錯(cuò)信息是你將要學(xué)習(xí)的另一種技能。
免不了的報(bào)錯(cuò)
第5步:運(yùn)行程序
一般來(lái)說(shuō),可執(zhí)行文件就是你打開(kāi)之后可以直接能夠運(yùn)行的文件。在一般的操作系統(tǒng)中(例如Windows,Linux),要想運(yùn)行某個(gè)程序,只需要雙擊這個(gè)文件或者右鍵打開(kāi)就可以運(yùn)行,這就是可執(zhí)行文件。那要怎么才能生成可執(zhí)行文件呢?例如為在Windows環(huán)境中,用QT編譯器運(yùn)行程序可以用快捷鍵Ctrl+R生成程序并顯示程序結(jié)構(gòu),如果用Visual Studio編譯器則是Ctrl F5編譯運(yùn)行。
第6步: 測(cè)試和調(diào)試程序
程序能夠正常運(yùn)行那是極好的,但有時(shí)候它也可能運(yùn)行不正確。因此,你應(yīng)該進(jìn)行檢查,看程序是否存在錯(cuò)誤。這個(gè)錯(cuò)誤在計(jì)算機(jī)行話中稱(chēng)之為 Bug。調(diào)試(Debugging)就是要發(fā)現(xiàn)并修正程序錯(cuò)誤。學(xué)習(xí)中自然會(huì)犯錯(cuò)誤,看起來(lái)編程中似乎也會(huì)犯錯(cuò)誤,所以在將所學(xué)知識(shí)應(yīng)用到編程中時(shí),準(zhǔn)備好時(shí)時(shí)想到自己很容易犯錯(cuò)誤。當(dāng)你成為本領(lǐng)更強(qiáng),技藝更精湛的程序員時(shí),你的錯(cuò)誤也會(huì)變得更嚴(yán)重而且不易察覺(jué)。
你犯錯(cuò)誤的機(jī)會(huì)很多。你可能會(huì)犯一個(gè)基本設(shè)計(jì)錯(cuò)誤,可能會(huì)錯(cuò)誤地實(shí)現(xiàn)了好的想法,可能會(huì)因?yàn)楹雎粤四硞€(gè)條件而將程序搞得一團(tuán)糟,可能會(huì)錯(cuò)誤地使用C,可能會(huì)犯打字母錯(cuò)誤,也可能會(huì)將中英文輸入搞錯(cuò)等等.....
不過(guò),這并不是什么丟臉的事情,每個(gè)人都會(huì)犯錯(cuò)誤,當(dāng)你被一個(gè)錯(cuò)誤折騰的焦頭爛額的時(shí)候,你才會(huì)深刻的記住這個(gè)錯(cuò)誤,以確保下次不會(huì)再犯。另外,編譯器擁有簡(jiǎn)單找錯(cuò)誤的能力,雖然不會(huì)具體到教你怎么改,但它會(huì)幫你標(biāo)記出錯(cuò)誤所在的那行,只要你認(rèn)真仔細(xì)的檢查錯(cuò)誤的那幾行并改正就可以了。
第7步: 維護(hù)和修改程序
在為自己或?yàn)閯e人創(chuàng)建程序后,該程序可能會(huì)有更廣泛的應(yīng)用。如果是這樣,你可能會(huì)發(fā)現(xiàn)需要對(duì)其進(jìn)行更改,也就是項(xiàng)目的維護(hù)和修改。在這里不得不提代碼風(fēng)格和注釋的作用了,很多人都不喜歡寫(xiě)注釋?zhuān)a風(fēng)格也極亂??僧?dāng)你去維護(hù)別人程序的時(shí)候,如果他沒(méi)有寫(xiě)過(guò)注釋?zhuān)⑶掖a一堆堆的擠在一起,那你可能會(huì)頭痛的要死,只想破口大罵寫(xiě)這個(gè)程序的程序員。由人及己,養(yǎng)成一個(gè)良好的編程風(fēng)格是一個(gè)非常好的習(xí)慣,寫(xiě)完程序順便標(biāo)上注釋。