第六章 你好世界
在這一刻,才真切地感受到了老爹的良苦用心。但不知道怎么的,一首「多么痛的領(lǐng)悟」總在我腦海中揮之不去。
「老爹,你說老媽她從事醫(yī)學(xué)方面的工作真的沒問題么?我好擔(dān)心她哪天因?yàn)獒t(yī)療事故被抓了……」
我很是擔(dān)憂的說道。
「唉~,這個(gè)也是老爹不買車的原因之一。算了算了,說多了都是淚,趕緊洗漱吃飯了……」
老爹深深嘆了一口氣。
「這和買車有什么關(guān)系?」
我不解道。
「傻啊你,買了車哪來的錢賠醫(yī)療事故的受害者?」
「Soga,還是老爹高瞻遠(yuǎn)矚,深謀遠(yuǎn)慮?!?p> 吃完飯,老爹帶著我跟著爺爺奶奶在小區(qū)里邊轉(zhuǎn)了轉(zhuǎn)。爺爺奶奶走了一會兒就去搗鼓健身器材去了,老爹拉著我來到了兒童區(qū)。
「要不要玩兒一會兒?」
「算了算了,這種小孩兒才喜歡的東西沒什么好玩兒的?!?p> 我搖了搖頭,一臉嫌棄地說道。
老爹聞言后愣了一下,而后哭笑不得地說道:「玥玥同學(xué),請問你今年幾歲呀?」
「過完年就十歲了?!?p> 「那你不是小孩兒么?」
「額……那小孩兒也是有區(qū)別的,玩兒這個(gè)的是低級小孩兒,而我是要改變世界的高級小孩兒……」
我揚(yáng)起頭驕傲的說道。
我很喜歡跟老爹待在一起,因?yàn)樗话銇碚f不會勉強(qiáng)我做任何我不想做的事,他總是耐心地誘導(dǎo),讓我主動去嘗試。
當(dāng)然,在大是大非面前,老爹是向來不會手軟的。
比如說我第一天上學(xué)回家不想做作業(yè),老爹規(guī)勸無果后差點(diǎn)沒揍我一頓。要不是奶奶攔著,后果簡直不堪設(shè)想。
聽姨奶奶說過,當(dāng)年她的女兒雲(yún)姑姑寄居在我們家的時(shí)候也曾享受過這個(gè)待遇。
不過雲(yún)姑姑就沒有這么好運(yùn)了,因?yàn)槟菚r(shí)奶奶不在家,雲(yún)姑姑被老爹狠狠地揍了一頓。
散了一會兒步,我便催促老爹該回家上課了。
「好吧,今天便由你老爹我親自帶領(lǐng)你走入程序的世界。在這個(gè)世界當(dāng)中你無所不能,能夠創(chuàng)造一切?!?p> 「哇哦,這么神奇的么?聽起來還讓人有點(diǎn)小激動呢!」
我搓了搓手,臉上滿是期待。
「首先,咱們在E盤根目錄下新建一個(gè)名為src的文件夾,用來存放代碼文件。
然后打開桌面的sublime text編輯器并新建一個(gè).c文件。
可以使用菜單,也可以使用快捷鍵,快捷鍵是Ctrl+N,你試試。」
「不行啊老爹,我按了好幾次怎么沒反應(yīng)?」
我費(fèi)了老大的勁,試好幾次都只按出了「N」,根本就沒有出現(xiàn)老爹演示的畫面。
因?yàn)橹?,我的臉都憋紅了。
「閨女,你手小夠不著,咱能不能一只手先按住Ctrl,然后用另一只手按N?」
「對哦,我怎么沒想到呢?哈哈,成功了!」
看著我宛如發(fā)現(xiàn)新大陸一般,老爹的嘴角微微地抽了抽。
「接下來要保存新建文件,同樣可以使用菜單和Ctrl+S。記住,以后寫幾行代碼就要Ctrl+S,不然萬一要是停電了,你之前寫的代碼可能就沒有了?!?p> 「好嘞,我記住了!」
「接下來跟著老爹一起寫,看仔細(xì)了,可千萬不能寫錯(cuò)了!」
一番小心翼翼地抄寫老爹的代碼后,又跟著老爹進(jìn)行了一系列的迷之操作,最后總算是在一個(gè)黑色的小窗口里輸出了一句「hello world」的字樣。
「恭喜你,現(xiàn)在已經(jīng)成功的進(jìn)入了程序世界的大門了。有道是師傅領(lǐng)進(jìn)門,修行在個(gè)人,之后能走到哪一步就看你自己了?!?p> 老爹一副神秘莫測的模樣,就差下巴的長胡須了。
「納尼?這,這就算進(jìn)門了?抄一段代碼就行了?老爹,你這不是坑閨女么?」
「誒~,閨女,萬事開頭難,既然老爹已經(jīng)幫你開了個(gè)頭,接下來當(dāng)然靠你自己啦?!?p> 老爹一副道貌凜然的樣子,看上去就像是一個(gè)神棍。
「可是中間也難,結(jié)尾更難?。±系?,不帶你這么坑人的!」
我很是不滿道。
「哈哈,好吧,那老爹我要認(rèn)真咯?!?p> 「……」
「剛剛讓你寫這段代碼還真不是老爹胡謅的,這算是咱們程序員的一個(gè)傳統(tǒng)了吧。
一般來說,萌級小菜鳥程序員接觸的第一個(gè)程序往往都是這個(gè)例程。這也意味著萌級小菜鳥正式踏上了程序員這條漫漫長路?!?p> 「原來是這樣呀!」
「好了,現(xiàn)在老爹就這個(gè)程序給你講解一下C語言的基本結(jié)構(gòu)。
#include是一個(gè)預(yù)編譯命令,它作用來導(dǎo)入發(fā)明C語言的大神們給我們提供的一些功能?!?p> 「預(yù)……編譯……是什么意思啊?」
「預(yù),就是先的意思。至于編譯嘛,之前老爹不是跟你說過么?計(jì)算機(jī)最終能直接識別的是機(jī)器語言,編譯就是將匯編或者高級語言翻譯成機(jī)器語言的過程。
所以預(yù)編譯就是說最先被編譯的意思?!?p> 「那<stdio.h>是啥意思?」
「昨天和你解釋過文字顯示的過程,說來簡單,但是實(shí)現(xiàn)起來還是很麻煩的。
可是基本上的程序都要顯示信息、獲取鍵盤輸入,所以C語言的發(fā)明者就把這些功能實(shí)現(xiàn)了,并放在了stdio.h這個(gè)庫中,提供給大家使用。
#include<stdio.h>是導(dǎo)入庫的規(guī)定格式,如果要使用數(shù)學(xué)相關(guān)的庫,則導(dǎo)入#include<math.h>。
而且我們還能寫自己的庫哦,這些等到以后再說?!?p> 「哦哦,原來是這樣。那老爹,今后我寫程序的時(shí)候怎么知道自己需要導(dǎo)入哪些庫呢?
萬一有些功能我好不容易實(shí)現(xiàn)了,結(jié)果發(fā)現(xiàn)C語言的發(fā)明者居然已經(jīng)提供了相關(guān)的庫,那豈不是費(fèi)力不討好呀?」
我皺著眉頭問道。
「這是個(gè)很好的問題,發(fā)明C語言的人顯然也考慮到了這個(gè)問題,所以他們提供相關(guān)的說明哦,這些在網(wǎng)上很容易就找到了。
所以呀,對于我們程序員來說,在動手寫代碼之前要先分析,分析實(shí)現(xiàn)某個(gè)功能要用什么方式實(shí)現(xiàn),涉及到哪些技術(shù)。
只有弄清楚了這些,寫代碼的時(shí)候才會思路清晰,事半功倍。而你擔(dān)心的這個(gè)問題,在這個(gè)階段也就迎刃而解了。
其實(shí)無論我們在做什么事情,都應(yīng)該像編程這樣,先考慮清楚做什么,怎么做。不然只會一頭霧水,如同沒頭的蒼蠅亂撞?!?p> 老爹語重心長地說道。
「好的,我知道了?!?p> 「哈哈,扯遠(yuǎn)了。接下來的代碼是聲明了一個(gè)名為main的函數(shù),至于什么是函數(shù),這個(gè)我們在后面再講。
我現(xiàn)在要說的是,main函數(shù)是程序的入口地址,也就是說一個(gè)程序是從main函數(shù)開始執(zhí)行的,我們寫的功能也要在main函數(shù)中運(yùn)行。
你看,我們在小黑屏里面打印hello word就是在main函數(shù)中運(yùn)行的。而printf,就是C語言發(fā)明者給我們提供的向小黑屏輸出信息的功能,它被放在stdio.h庫中?!?p> 「那老爹,我是不是可以把hello world改成我的名字???」
我突然靈機(jī)一動說道。
「那你試試唄!」
「修改……Ctrl+S保存……打開所在文件夾……Shift+鼠標(biāo)右鍵……在此處打開命令窗口……gcc firstProj.c -o firstProj……
呀,沒有報(bào)錯(cuò),編譯成功了!接下來就該執(zhí)行firstProj啦……
咦,怎么出問題了?」