不卡AV在线|网页在线观看无码高清|亚洲国产亚洲国产|国产伦精品一区二区三区免费视频

學(xué)習(xí)啦 > 學(xué)習(xí)方法 > 通用學(xué)習(xí)方法 > 學(xué)習(xí)經(jīng)驗(yàn) > 如何才能正確有效學(xué)習(xí)c語(yǔ)言

如何才能正確有效學(xué)習(xí)c語(yǔ)言

時(shí)間: 欣怡1112 分享

如何才能正確有效學(xué)習(xí)c語(yǔ)言

  C語(yǔ)言是一門(mén)“古老”也是一門(mén)很有前途的計(jì)算機(jī)編程語(yǔ)言。想要學(xué)好c語(yǔ)言,需要找到正確的學(xué)習(xí)方法。以下是學(xué)習(xí)啦小編分享給大家的有效學(xué)習(xí)c語(yǔ)言的建議,希望可以幫到你!

  有效學(xué)習(xí)c語(yǔ)言的建議

  (一)編。

  學(xué)習(xí)C語(yǔ)言,乃至學(xué)習(xí)所有的語(yǔ)言,都講究一個(gè)動(dòng)手——不是動(dòng)手打人,而是動(dòng)手編程序。你必須通過(guò)編寫(xiě)程序來(lái)熟悉知識(shí)、理解知識(shí)。倘若只學(xué)不編,只看別人的程序,自己不動(dòng)手寫(xiě),是不能從入門(mén)到精通的。要知道,在計(jì)算機(jī)界,只說(shuō)不練的人很欠揍。試想一下,你在哪里辛辛苦苦的編程序,他卻站在一邊,如老板一樣喋喋不休,對(duì)你提出這項(xiàng)意見(jiàn),那項(xiàng)思路,甚至?xí)痴勛约壕幊虒?huì)如何如何,好像很牛皮的樣子,但就是不編一行代碼。估計(jì)大家碰上如此之人,只會(huì)一個(gè)動(dòng)作,那就是點(diǎn)擊“踩”。

  一個(gè)“編”字就可以學(xué)好C語(yǔ)言嗎?真的如此簡(jiǎn)單嗎?不是的,僅僅“編”是不夠的,你還需要“我編”。

  (二)我編。

  請(qǐng)注意修辭,“我”編!這個(gè)“我”其實(shí)就是只“你”,也就是學(xué)習(xí)C語(yǔ)言的人。

  大家在學(xué)習(xí)C語(yǔ)言時(shí),要多編寫(xiě)程序,比如學(xué)習(xí)鏈表時(shí),要自己編寫(xiě)鏈表程序,甚至自己編寫(xiě)俄羅斯方塊等游戲程序來(lái)練習(xí)。不過(guò)有個(gè)前提條件,你必須自己編寫(xiě)這些所有的程序才有效果,如果你從網(wǎng)絡(luò)上下載了某某源代碼,或者拷貝了同學(xué)的程序,任何大言不慚的說(shuō)是自己編寫(xiě)的,那么我也只能大言不慚的告訴你,這樣做出了養(yǎng)成偷竊的習(xí)慣外,沒(méi)有任何效果!

  有同學(xué)會(huì)問(wèn),那么“親自”編程序總可以精通C語(yǔ)言了吧,其實(shí)還差一點(diǎn)點(diǎn),僅僅“編”是不夠的,只是“我編”還不足以精通,為了達(dá)到C語(yǔ)言的最高峰,你還需要“我編編編”。

  (三)我編編編。

  “編”字重復(fù)三次,這里的“三”,代表多,意思是你必須多多的編寫(xiě)程序。親自編寫(xiě)10行代碼等于沒(méi)有編,親自編寫(xiě)1000行代碼是遠(yuǎn)遠(yuǎn)不夠的,親自編寫(xiě)1萬(wàn)行代碼還馬馬虎虎,親自編寫(xiě)10萬(wàn)行代碼,你絕對(duì)成為程序員中的戰(zhàn)斗員。

  乍一看10萬(wàn)行代碼,估計(jì)有同學(xué)會(huì)先直挺挺的躺下去,然后又眼珠一轉(zhuǎn)站了起來(lái)——他們想起了壞主意。“不就是10萬(wàn)行嗎,容易!現(xiàn)在的編程工具都有代碼生成功能,隨便在VC中用鼠標(biāo)拖曳幾下,搞一個(gè)MFC窗口程序,系統(tǒng)就自動(dòng)生成了幾百行的代碼。在搞幾個(gè)三方控件,幾千行代碼就生成了!”

  再次聲明,“編編編”是有前綴的,那就是“我”,也就是學(xué)習(xí)者自己,使用代碼自動(dòng)生成工具產(chǎn)生的代碼難道是“學(xué)習(xí)者”編寫(xiě)的?

  要不上有政策,下有對(duì)策,“不用代碼生成器,那么就抄,照著輸入代碼就行!”哎,人不能無(wú)恥到那種地步!這十萬(wàn)行代碼要“你”親自完成,親自在腦海中發(fā)芽、生根,再親自逐行輸入。這又不是什么政績(jī)?nèi)蝿?wù),也不是什么形象工程,欺騙別人最終只能是自欺欺人。

  有效學(xué)習(xí)c語(yǔ)言的建議

  (1)保持好奇心

  這是一個(gè)現(xiàn)實(shí)的問(wèn)題,如果你是非計(jì)算機(jī)專(zhuān)業(yè)的大學(xué)生,大部分人對(duì)C語(yǔ)言是恐懼的,因?yàn)?掛科率高)你懂得……。而如果你是小學(xué)生或初中生,倒也不用擔(dān)心,因?yàn)槟銈兊挠職夂秃闷嫘亩急却髮W(xué)生強(qiáng)大很多。當(dāng)然,無(wú)論是誰(shuí),保持好奇心是你學(xué)習(xí)不斷前進(jìn)的永恒動(dòng)力。

  (2)掌握有效的學(xué)習(xí)方法

  C語(yǔ)言是一門(mén)公認(rèn)的不易入門(mén)的語(yǔ)言(否則也不會(huì)那么多大學(xué)生“慘叫”了^_^),因?yàn)樯婕暗膬?nèi)容比較多( 特別是語(yǔ)法繁多 )。從這么多年的教學(xué)實(shí)踐來(lái)看,傳統(tǒng)教學(xué)和學(xué)習(xí)存在一些問(wèn)題。

  目前,我們高校也在進(jìn)行C語(yǔ)言教學(xué)方式的改革,概括起來(lái)幾個(gè)階段:

  (a) 理解和體驗(yàn)階段

  閱讀和理解現(xiàn)有的程序,一般是教材資料的程序,每個(gè)程序都必須親手打一遍。在輸入代碼的同時(shí),一定要了解每一個(gè)語(yǔ)句的意義和運(yùn)算符號(hào)的意義。

  (b) 修改階段:

  完成了第一階段的學(xué)習(xí)后(一般2-4節(jié)課),開(kāi)始根據(jù)給定的源代碼進(jìn)行簡(jiǎn)單的修改,這個(gè)階段可以實(shí)現(xiàn)一點(diǎn)點(diǎn)自己的想法,同時(shí)也能將相關(guān)的語(yǔ)法掌握的更加熟練。

  (c) 模仿階段:

  當(dāng)我們可以進(jìn)行簡(jiǎn)單修改代碼后,可以嘗試模仿現(xiàn)有程序的代碼,編寫(xiě)自己的代碼,比如,我們學(xué)會(huì)了求解梯形面積的程序后,我們可以編寫(xiě)求解三角形的面積。

  此時(shí)的模仿,不僅僅是模仿代碼結(jié)構(gòu),還需要模仿問(wèn)題的分析方法,有數(shù)學(xué)問(wèn)題,也有實(shí)際生活問(wèn)題,這也是初步培養(yǎng)邏輯思維和計(jì)算思維的過(guò)程。

  (d) 獨(dú)立閱讀代碼階段

  在編寫(xiě)程序之前,閱讀現(xiàn)有的程序,可以提高程序的理解能力,學(xué)會(huì)其他人編寫(xiě)程序的思想,也可以是同學(xué)的程序,找出同學(xué)程序的錯(cuò)誤或不同寫(xiě)法,都是很好的學(xué)習(xí)編程的方式。

  (e) 獨(dú)立分析問(wèn)題階段

  這個(gè)階段和第4階段同時(shí)進(jìn)行,獨(dú)立分析問(wèn)題就是將現(xiàn)實(shí)的問(wèn)題運(yùn)用計(jì)算思維去解決,即通過(guò)問(wèn)題分解、模塊劃分、算法設(shè)計(jì)和代碼編寫(xiě),最后調(diào)試程序。

  C語(yǔ)言該怎樣寫(xiě)

  優(yōu)化

  -O2,-O3

  通常想使用-O2,但有時(shí)也使用-O3。在兩個(gè)級(jí)別下(通過(guò)編譯器)分別進(jìn)行測(cè)試并且保持最佳性能。

  -Os

  -Os如果你關(guān)注緩存效率(本該如此),這個(gè)選項(xiàng)能幫上你。

  警告

  -wall -Wextra -pedantic

  最新版本的編譯器支持-Wpedantic,但為了向后兼容其也接受古老的-pedantic。

  在測(cè)試過(guò)程中,應(yīng)該在所有的平臺(tái)上都添加-Werror和-Wshadow。

  因?yàn)椴煌钠脚_(tái)、編譯器和庫(kù)會(huì)發(fā)出不同警告,通過(guò)使用-Werror可更有針對(duì)性地部署生產(chǎn)資源。你或許并不想僅因?yàn)槟硞€(gè)平臺(tái)上從未見(jiàn)過(guò)的GCC版本在新的運(yùn)行方式下時(shí)報(bào)錯(cuò)就毀掉用戶(hù)的全部構(gòu)建。

  額外選擇包括-Wstrict-overflow -fno-strict-aliasing。

  要么指定-fno-strict-aliasing,要么就確保只以對(duì)象創(chuàng)建時(shí)的類(lèi)型對(duì)其進(jìn)行訪問(wèn)。因?yàn)樵S多C語(yǔ)言代碼擁有跨類(lèi)型的別名,當(dāng)不能控制整個(gè)底層源代碼樹(shù)時(shí),使用-fno-strict-aliasing是個(gè)不錯(cuò)的選擇。

  到目前為止,clang有時(shí)會(huì)對(duì)一些有效語(yǔ)法發(fā)出警告,所以需要添加-Wno-

  missing-field-initializers。GCC在4.7.0版本后修正了這些不必要的警告。

  構(gòu)建

  編譯單元

  構(gòu)建C程序項(xiàng)目的最常見(jiàn)方式是將每個(gè)C源文件分解成目標(biāo)文件,最后將所有目標(biāo)文件鏈接到一起。這個(gè)過(guò)程在增量開(kāi)發(fā)中表現(xiàn)很好,但從性能和優(yōu)化角度看,并非最優(yōu)。因?yàn)樵谶@種方式下編譯器不能檢測(cè)出跨文件的潛在優(yōu)化之處。

  LTO——鏈接時(shí)優(yōu)化

  LTO通過(guò)使用中間表示方式對(duì)目標(biāo)文件進(jìn)行處理,因此解決了“跨編譯單元源文件分析和優(yōu)化問(wèn)題”,所以source-aware優(yōu)化可在鏈接時(shí)跨編譯單元實(shí)現(xiàn)。

  LTO明顯減緩了鏈接過(guò)程,但make-j會(huì)有所幫助。

  clang LTO

  gcc LTO

  到2016年為止,clang和gcc都可通過(guò)在目標(biāo)文件編譯和最后庫(kù)/程序鏈接時(shí),向命令行選項(xiàng)中添加-flto來(lái)支持LTO。

  不過(guò)LTO仍需監(jiān)管。有時(shí),程序中一些代碼沒(méi)有被直接使用,而是被附加的庫(kù)使用了。因?yàn)長(zhǎng)TO會(huì)在全局性鏈接時(shí)檢測(cè)出沒(méi)有使用或者不可訪問(wèn)的代碼,也可能將其刪除,所以這些代碼將不會(huì)包含到最后的鏈接結(jié)果中。

  架構(gòu)

  -march = native

  允許編譯器使用CPU完整的特性集。

  再一次,性能測(cè)試和回歸測(cè)試都非常重要(之后在多個(gè)編譯器以及多個(gè)版本中對(duì)結(jié)果進(jìn)行比較)以確保任何啟用的優(yōu)化都不會(huì)產(chǎn)生副作用。

  如果你使用not-your-build-machine特性,-msse2和-msse4.2可能起到作用。
猜你喜歡:

1.程序開(kāi)發(fā)

2.初學(xué)者應(yīng)該如何去學(xué)習(xí)c++

3.學(xué)習(xí)英語(yǔ)

4.前端開(kāi)發(fā)實(shí)習(xí)總結(jié)

5.c語(yǔ)言邏輯思維

3743677