如何才能正確有效學(xué)習(xí)c語言
如何才能正確有效學(xué)習(xí)c語言
C語言是一門“古老”也是一門很有前途的計算機編程語言。想要學(xué)好c語言,需要找到正確的學(xué)習(xí)方法。以下是學(xué)習(xí)啦小編分享給大家的有效學(xué)習(xí)c語言的建議,希望可以幫到你!
有效學(xué)習(xí)c語言的建議
(一)編。
學(xué)習(xí)C語言,乃至學(xué)習(xí)所有的語言,都講究一個動手——不是動手打人,而是動手編程序。你必須通過編寫程序來熟悉知識、理解知識。倘若只學(xué)不編,只看別人的程序,自己不動手寫,是不能從入門到精通的。要知道,在計算機界,只說不練的人很欠揍。試想一下,你在哪里辛辛苦苦的編程序,他卻站在一邊,如老板一樣喋喋不休,對你提出這項意見,那項思路,甚至?xí)痴勛约壕幊虒绾稳绾?,好像很牛皮的樣子,但就是不編一行代碼。估計大家碰上如此之人,只會一個動作,那就是點擊“踩”。
一個“編”字就可以學(xué)好C語言嗎?真的如此簡單嗎?不是的,僅僅“編”是不夠的,你還需要“我編”。
(二)我編。
請注意修辭,“我”編!這個“我”其實就是只“你”,也就是學(xué)習(xí)C語言的人。
大家在學(xué)習(xí)C語言時,要多編寫程序,比如學(xué)習(xí)鏈表時,要自己編寫鏈表程序,甚至自己編寫俄羅斯方塊等游戲程序來練習(xí)。不過有個前提條件,你必須自己編寫這些所有的程序才有效果,如果你從網(wǎng)絡(luò)上下載了某某源代碼,或者拷貝了同學(xué)的程序,任何大言不慚的說是自己編寫的,那么我也只能大言不慚的告訴你,這樣做出了養(yǎng)成偷竊的習(xí)慣外,沒有任何效果!
有同學(xué)會問,那么“親自”編程序總可以精通C語言了吧,其實還差一點點,僅僅“編”是不夠的,只是“我編”還不足以精通,為了達到C語言的最高峰,你還需要“我編編編”。
(三)我編編編。
“編”字重復(fù)三次,這里的“三”,代表多,意思是你必須多多的編寫程序。親自編寫10行代碼等于沒有編,親自編寫1000行代碼是遠遠不夠的,親自編寫1萬行代碼還馬馬虎虎,親自編寫10萬行代碼,你絕對成為程序員中的戰(zhàn)斗員。
乍一看10萬行代碼,估計有同學(xué)會先直挺挺的躺下去,然后又眼珠一轉(zhuǎn)站了起來——他們想起了壞主意。“不就是10萬行嗎,容易!現(xiàn)在的編程工具都有代碼生成功能,隨便在VC中用鼠標(biāo)拖曳幾下,搞一個MFC窗口程序,系統(tǒng)就自動生成了幾百行的代碼。在搞幾個三方控件,幾千行代碼就生成了!”
再次聲明,“編編編”是有前綴的,那就是“我”,也就是學(xué)習(xí)者自己,使用代碼自動生成工具產(chǎn)生的代碼難道是“學(xué)習(xí)者”編寫的?
要不上有政策,下有對策,“不用代碼生成器,那么就抄,照著輸入代碼就行!”哎,人不能無恥到那種地步!這十萬行代碼要“你”親自完成,親自在腦海中發(fā)芽、生根,再親自逐行輸入。這又不是什么政績?nèi)蝿?wù),也不是什么形象工程,欺騙別人最終只能是自欺欺人。
有效學(xué)習(xí)c語言的建議
(1)保持好奇心
這是一個現(xiàn)實的問題,如果你是非計算機專業(yè)的大學(xué)生,大部分人對C語言是恐懼的,因為(掛科率高)你懂得……。而如果你是小學(xué)生或初中生,倒也不用擔(dān)心,因為你們的勇氣和好奇心都比大學(xué)生強大很多。當(dāng)然,無論是誰,保持好奇心是你學(xué)習(xí)不斷前進的永恒動力。
(2)掌握有效的學(xué)習(xí)方法
C語言是一門公認的不易入門的語言(否則也不會那么多大學(xué)生“慘叫”了^_^),因為涉及的內(nèi)容比較多( 特別是語法繁多 )。從這么多年的教學(xué)實踐來看,傳統(tǒng)教學(xué)和學(xué)習(xí)存在一些問題。
目前,我們高校也在進行C語言教學(xué)方式的改革,概括起來幾個階段:
(a) 理解和體驗階段
閱讀和理解現(xiàn)有的程序,一般是教材資料的程序,每個程序都必須親手打一遍。在輸入代碼的同時,一定要了解每一個語句的意義和運算符號的意義。
(b) 修改階段:
完成了第一階段的學(xué)習(xí)后(一般2-4節(jié)課),開始根據(jù)給定的源代碼進行簡單的修改,這個階段可以實現(xiàn)一點點自己的想法,同時也能將相關(guān)的語法掌握的更加熟練。
(c) 模仿階段:
當(dāng)我們可以進行簡單修改代碼后,可以嘗試模仿現(xiàn)有程序的代碼,編寫自己的代碼,比如,我們學(xué)會了求解梯形面積的程序后,我們可以編寫求解三角形的面積。
此時的模仿,不僅僅是模仿代碼結(jié)構(gòu),還需要模仿問題的分析方法,有數(shù)學(xué)問題,也有實際生活問題,這也是初步培養(yǎng)邏輯思維和計算思維的過程。
(d) 獨立閱讀代碼階段
在編寫程序之前,閱讀現(xiàn)有的程序,可以提高程序的理解能力,學(xué)會其他人編寫程序的思想,也可以是同學(xué)的程序,找出同學(xué)程序的錯誤或不同寫法,都是很好的學(xué)習(xí)編程的方式。
(e) 獨立分析問題階段
這個階段和第4階段同時進行,獨立分析問題就是將現(xiàn)實的問題運用計算思維去解決,即通過問題分解、模塊劃分、算法設(shè)計和代碼編寫,最后調(diào)試程序。
C語言該怎樣寫
優(yōu)化
-O2,-O3
通常想使用-O2,但有時也使用-O3。在兩個級別下(通過編譯器)分別進行測試并且保持最佳性能。
-Os
-Os如果你關(guān)注緩存效率(本該如此),這個選項能幫上你。
警告
-wall -Wextra -pedantic
最新版本的編譯器支持-Wpedantic,但為了向后兼容其也接受古老的-pedantic。
在測試過程中,應(yīng)該在所有的平臺上都添加-Werror和-Wshadow。
因為不同的平臺、編譯器和庫會發(fā)出不同警告,通過使用-Werror可更有針對性地部署生產(chǎn)資源。你或許并不想僅因為某個平臺上從未見過的GCC版本在新的運行方式下時報錯就毀掉用戶的全部構(gòu)建。
額外選擇包括-Wstrict-overflow -fno-strict-aliasing。
要么指定-fno-strict-aliasing,要么就確保只以對象創(chuàng)建時的類型對其進行訪問。因為許多C語言代碼擁有跨類型的別名,當(dāng)不能控制整個底層源代碼樹時,使用-fno-strict-aliasing是個不錯的選擇。
到目前為止,clang有時會對一些有效語法發(fā)出警告,所以需要添加-Wno-
missing-field-initializers。GCC在4.7.0版本后修正了這些不必要的警告。
構(gòu)建
編譯單元
構(gòu)建C程序項目的最常見方式是將每個C源文件分解成目標(biāo)文件,最后將所有目標(biāo)文件鏈接到一起。這個過程在增量開發(fā)中表現(xiàn)很好,但從性能和優(yōu)化角度看,并非最優(yōu)。因為在這種方式下編譯器不能檢測出跨文件的潛在優(yōu)化之處。
LTO——鏈接時優(yōu)化
LTO通過使用中間表示方式對目標(biāo)文件進行處理,因此解決了“跨編譯單元源文件分析和優(yōu)化問題”,所以source-aware優(yōu)化可在鏈接時跨編譯單元實現(xiàn)。
LTO明顯減緩了鏈接過程,但make-j會有所幫助。
clang LTO
gcc LTO
到2016年為止,clang和gcc都可通過在目標(biāo)文件編譯和最后庫/程序鏈接時,向命令行選項中添加-flto來支持LTO。
不過LTO仍需監(jiān)管。有時,程序中一些代碼沒有被直接使用,而是被附加的庫使用了。因為LTO會在全局性鏈接時檢測出沒有使用或者不可訪問的代碼,也可能將其刪除,所以這些代碼將不會包含到最后的鏈接結(jié)果中。
架構(gòu)
-march = native
允許編譯器使用CPU完整的特性集。
再一次,性能測試和回歸測試都非常重要(之后在多個編譯器以及多個版本中對結(jié)果進行比較)以確保任何啟用的優(yōu)化都不會產(chǎn)生副作用。
如果你使用not-your-build-machine特性,-msse2和-msse4.2可能起到作用。
猜你喜歡:
1.程序開發(fā)
2.初學(xué)者應(yīng)該如何去學(xué)習(xí)c++
5.c語言邏輯思維