C++ 學(xué)習(xí)筆記(1)

摘要:本文是我個(gè)人對(duì)C++語言的認(rèn)識(shí)和看法候味,以及以后在學(xué)習(xí)C++語言中自己要去遵守的一些規(guī)范和學(xué)習(xí)思路盅安,提出了一個(gè)關(guān)于定義main函數(shù)及其返回值的討論和解答。

這個(gè)學(xué)期開了C++還有單片機(jī),想再加強(qiáng)一下C/C++語言嚣伐,畢竟以后除了漢語和英語還得多掌握幾門語言。近期的目標(biāo)是復(fù)習(xí)C語言/匯編語言萍丐,學(xué)習(xí)C++語言轩端,也許matlab語言也得學(xué)習(xí)一下。

買了一本參考書《C Primer Plus 》(中文第五版)逝变,借了兩本參考書《程序設(shè)計(jì)基礎(chǔ)》(吳文虎)和《 C++ Primer 》(第五版)基茵,現(xiàn)在看起來《程序設(shè)計(jì)基礎(chǔ)》這本書是非常不錯(cuò)的奋构,主要針對(duì)是的算法,穿插著C++的語法知識(shí)拱层,看了幾章感覺有點(diǎn)漸入佳境的感覺弥臼,還訓(xùn)練了一下邏輯思維,在此推薦一下根灯。

第一篇C++學(xué)習(xí)筆記径缅,先說一些前期的東西,主要是我的學(xué)習(xí)思路和其他的外部準(zhǔn)備烙肺。

我是電氣工程及其自動(dòng)化專業(yè)的學(xué)生纳猪,以后大概不會(huì)以coding為生,但是現(xiàn)在在我看來茬高,現(xiàn)在c/c++作為一種編程語言兆旬,能在以后的工作中提供很大的幫助,比如51需要用C51編程怎栽,ARM架構(gòu)的K60也需要C語言丽猬,以后的DSP也需要(?大概是匯編)熏瞄,還比如最近學(xué)的《電力系統(tǒng)分析》中「潮流計(jì)算」計(jì)算機(jī)算法的實(shí)現(xiàn)脚祟,所以把C語言基本的語法、用法掌握强饮,做到能看懂由桌,以后會(huì)用,養(yǎng)成好的習(xí)慣邮丰,為以后工作打好基礎(chǔ)行您。以上是基礎(chǔ),但通過電子設(shè)計(jì)大賽明白剪廉,對(duì)于「自動(dòng)化」的核心就是控制娃循,控制需要算法來實(shí)現(xiàn),算法是框架斗蒋,沒有框架的話其他的都是空談捌斧,所以更要注重算法的學(xué)習(xí),在構(gòu)建起算法的基礎(chǔ)上泉沾,用編程實(shí)現(xiàn)捞蚂,這才是我的最終目標(biāo),編程是為了完成任務(wù)跷究。比如借的這本《程序設(shè)計(jì)基礎(chǔ)》上姓迅,有很多算法,使我大大拓寬了眼界,實(shí)在是受益匪淺队贱。

?思路(構(gòu)建(數(shù)學(xué))模型) --》 算法 --》編程構(gòu)思 --》程序?qū)崿F(xiàn)

既然開始了編程色冀,那就很可能不是一個(gè)人的事情潭袱,所以一要遵循標(biāo)準(zhǔn)柱嫌,二要有可讀性。先說標(biāo)準(zhǔn)的問題:C/C++的標(biāo)準(zhǔn)屯换,C最新的ISO標(biāo)準(zhǔn)是C99编丘,C++最新的ISO標(biāo)準(zhǔn)是C++14,使用最新的標(biāo)準(zhǔn)不一定是最好的彤悔,但是起碼不要使用20年前的C89的標(biāo)準(zhǔn)凹巫ァ(比如現(xiàn)行很多高校的教材)。

ISO C標(biāo)準(zhǔn)
ISO C++標(biāo)準(zhǔn)

遵循標(biāo)準(zhǔn)晕窑,總是沒錯(cuò)的抑片。就像現(xiàn)在大三開的專業(yè)課,很多行業(yè)標(biāo)準(zhǔn)是需要嚴(yán)格遵守的(比如電氣行業(yè)的DL標(biāo)準(zhǔn))杨赤,不能按照自己的想法敞斋,而是要遵循官方的、最新的行業(yè)規(guī)范來辦事疾牲。

我的集成開發(fā)環(huán)境選擇了VS2013community植捎,但是據(jù)說對(duì)C99支持不好,但是對(duì)C++11支持較好阳柔,有機(jī)會(huì)的話再用更好用的開發(fā)環(huán)境吧焰枢,目前剛起步,夠用就好舌剂。

2015/10/6 起使用Dev-C++ 5.11版本很好用济锄。

談了這么多空話,為什么要遵循標(biāo)準(zhǔn)呢霍转?看下面這個(gè)例子:

所有的C程序都離不開主函數(shù)(main)荐绝,但是現(xiàn)在我用過的課本都是這樣寫的

?void main(){ /* */}

如果寫完程序,程序沒有問題的話谴忧,編譯運(yùn)行是不會(huì)報(bào)錯(cuò)的(但是在Dev-C++會(huì)報(bào)錯(cuò))很泊。

使用Dev-c編譯運(yùn)行

但是,去看最新的C99標(biāo)準(zhǔn):

Stratup

標(biāo)準(zhǔn)要求的是:

int main() {/* */}or int main(int argc, char *argv[]){/* */}

并且在main函數(shù)的最后需要加一句 return 0;

在《C++ primer》中第一章也提到了:

main函數(shù)的返回類型必須為int沾谓,即整數(shù)類型委造。int類型是一種內(nèi)置類型(build-intpye),即語言自身定義的類型均驶。

為什么要用int型呢昏兆,而且返回?cái)?shù)呢?我不知道妇穴,我去百度爬虱,

那么看一下CSDN上高手的討論吧:

?假設(shè)用戶的命令由command執(zhí)行,首先command把程序加入內(nèi)存,然后設(shè)置CPU的CS:IP指向程序的第一條指令(也就是程序入口,在C++中就是main()函數(shù)),從而使程序得以運(yùn)行.程序結(jié)束后,返回到command中,CPU繼續(xù)運(yùn)行command.注意在返回的時(shí)候要有一個(gè)返回值,這樣才能安全退出程序(注意我用的是退出一詞),之后各寄存器會(huì)有恢復(fù)動(dòng)作,如果沒有返回值,雖然表面上看程序也正常結(jié)束了,但實(shí)際上它并沒有退出,各寄存器并沒有恢復(fù),如CS:IP 還是指向程序尾部,如果得到CS:IP,那么可以讓程序繼續(xù)執(zhí)行下去,但是所執(zhí)行的程序已經(jīng)不是你的代碼所在的那段內(nèi)存空間了,它在執(zhí)行其它內(nèi)存中的程序隶债。

?main 函數(shù)的返回值類型必須是 int ,這樣返回值才能傳遞給程序的激活者(如操作系統(tǒng))跑筝。

也許一直用之前熟悉的套路死讹,也許不問個(gè)為什么,一直會(huì)錯(cuò)下去曲梗,到最后debug都不知道哪里出現(xiàn)錯(cuò)誤赞警。如果一開始就使用標(biāo)準(zhǔn)的話,起碼不會(huì)走彎路虏两。

當(dāng)然愧旦,閱讀幾百頁的ISO標(biāo)準(zhǔn)是非常頭疼的事,不過每次當(dāng)新的標(biāo)準(zhǔn)發(fā)布時(shí)定罢,看高手給出的update分析還是必須的(其實(shí)我就看過C89和C99的不同笤虫,還沒看完……)。

PS:不過如果編譯器不支持最新的標(biāo)準(zhǔn)好像也很無語祖凫,尤其是以后要面對(duì)工業(yè)環(huán)境琼蚯、嵌入式的開發(fā)(比如給8051編程的Keil C51,是不支持c99標(biāo)準(zhǔn)的蝙场,但好像IAR就支持的挺好)凌停,都是古老的集成開發(fā)環(huán)境,不會(huì)追求最新的標(biāo)準(zhǔn)售滤,這些環(huán)境的要求就是穩(wěn)定罚拟,穩(wěn)定壓倒一切!所以是有點(diǎn)糾結(jié)的完箩,新的東西肯定是為了用著更順手赐俗,當(dāng)習(xí)慣了一個(gè)方面快捷的標(biāo)準(zhǔn),再去使用舊的不順手的編寫環(huán)境弊知,內(nèi)心一定是崩潰的阻逮,但必須適應(yīng)。但目前來說拋棄VC++6.0是必須的秩彤,因?yàn)樗踔吝Bwin8.1都不支持叔扼!使用新的編譯器,學(xué)習(xí)一個(gè)新的集成開發(fā)環(huán)境漫雷,也會(huì)是一個(gè)非常有趣的事瓜富!

IAR Option

可以看到在IAR for ARM里的project option里 c dialect里有對(duì)C99的支持,還有VLA(Variable Length Array可變長(zhǎng)度數(shù)組)降盹。

標(biāo)準(zhǔn)都可以在ISO網(wǎng)站上查詢到与柑!

說完標(biāo)準(zhǔn)問題,說說我對(duì)可讀性的理解:

在《程序設(shè)計(jì)基礎(chǔ)》中,吳文虎老師提到:

程序是給人編的价捧,讓人家看懂是第一位重要的事丑念。特別是將來的你可能參加一個(gè)團(tuán)隊(duì),幾十人甚至幾百人一起合作结蟋,相互協(xié)同脯倚,就更須將注釋寫的清清楚楚了。

說的特別好椎眯,尤其是對(duì)于剛剛上路的我挠将,添加了注釋也是為自己一路點(diǎn)燈,要不然起了一堆亂七八糟的變量编整,不知道有什么用,很痛苦乳丰。寫了一堆代碼掌测,不知道要干什么,也很痛苦产园。所以走一步點(diǎn)一盞燈汞斧,要不對(duì)于剛起步的菜雞,容易迷路什燕。當(dāng)然也像吳老師說的那樣粘勒,對(duì)于別人來說更是一件方便的事,當(dāng)有了注釋屎即,更容易明白一個(gè)人思路庙睡。看到別人的代碼是整齊的技俐,起碼才有了想讀下去的沖動(dòng)乘陪,要是寫的亂七八糟,一點(diǎn)想看的欲望都沒有(這好像高中的語文/數(shù)學(xué)/英語/等科目的卷面分暗窭蕖7纫亍)。

代碼整齊在VS2013里很智能井赌,每一行的結(jié)束打上分號(hào)就會(huì)自動(dòng)對(duì)齊谤逼。但VC++6.0就沒這么好了,而且coding界面也不是很友好仇穗。VS2013雖然復(fù)雜流部,可是會(huì)很及時(shí)的提醒你一些語法上的錯(cuò)誤,這樣對(duì)于我這樣的新手仪缸,更是一個(gè)再好不過的事啦贵涵!

VS2013 Coding
反匯編

嘮叨了這么多,自己也煩了。但是工欲善其事宾茂,必先利其器瓷马,當(dāng)大體的思路和目標(biāo)在腦袋里形成,那么只需一步一步來就好跨晴。下面欧聘,就要真正的開始了!


參考資料:

關(guān)于C99與C89的不同:http://blog.csdn.net/leixiaohua1020/article/details/12761053

main函數(shù)返回值類型的討論:http://bbs.csdn.net/topics/200039113

ISO官網(wǎng):http://www.iso.org/iso/home.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末端盆,一起剝皮案震驚了整個(gè)濱河市怀骤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌焕妙,老刑警劉巖蒋伦,帶你破解...
    沈念sama閱讀 216,997評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異焚鹊,居然都是意外死亡痕届,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門末患,熙熙樓的掌柜王于貴愁眉苦臉地迎上來研叫,“玉大人,你說我怎么就攤上這事璧针∪侣” “怎么了?”我有些...
    開封第一講書人閱讀 163,359評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵探橱,是天一觀的道長(zhǎng)申屹。 經(jīng)常有香客問我,道長(zhǎng)走搁,這世上最難降的妖魔是什么独柑? 我笑而不...
    開封第一講書人閱讀 58,309評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮私植,結(jié)果婚禮上忌栅,老公的妹妹穿的比我還像新娘。我一直安慰自己曲稼,他們只是感情好索绪,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評(píng)論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著贫悄,像睡著了一般瑞驱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上窄坦,一...
    開封第一講書人閱讀 51,258評(píng)論 1 300
  • 那天唤反,我揣著相機(jī)與錄音凳寺,去河邊找鬼。 笑死彤侍,一個(gè)胖子當(dāng)著我的面吹牛肠缨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播盏阶,決...
    沈念sama閱讀 40,122評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼晒奕,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了名斟?” 一聲冷哼從身側(cè)響起脑慧,我...
    開封第一講書人閱讀 38,970評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎砰盐,沒想到半個(gè)月后闷袒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,403評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡楞卡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評(píng)論 3 334
  • 正文 我和宋清朗相戀三年霜运,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蒋腮。...
    茶點(diǎn)故事閱讀 39,769評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖藕各,靈堂內(nèi)的尸體忽然破棺而出池摧,到底是詐尸還是另有隱情,我是刑警寧澤激况,帶...
    沈念sama閱讀 35,464評(píng)論 5 344
  • 正文 年R本政府宣布作彤,位于F島的核電站,受9級(jí)特大地震影響乌逐,放射性物質(zhì)發(fā)生泄漏竭讳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評(píng)論 3 327
  • 文/蒙蒙 一浙踢、第九天 我趴在偏房一處隱蔽的房頂上張望绢慢。 院中可真熱鬧,春花似錦洛波、人聲如沸胰舆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽缚窿。三九已至,卻和暖如春焰扳,著一層夾襖步出監(jiān)牢的瞬間倦零,已是汗流浹背误续。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留扫茅,地道東北人蹋嵌。 一個(gè)月前我還...
    沈念sama閱讀 47,831評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像诞帐,于是被迫代替她去往敵國和親欣尼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容