初次接觸C/C++語(yǔ)言注意事項(xiàng)
C/C++語(yǔ)言對(duì)函數(shù)的處理方式是不同的。extern "C"是使C++能夠調(diào)用C寫(xiě)作的庫(kù)文件的一個(gè)手段,如果要對(duì)編譯器提示使用C的方式來(lái)處理函數(shù)的話,那么就要使用extern "C"來(lái)說(shuō)明。
C語(yǔ)言簡(jiǎn)潔、高效,但是C語(yǔ)言也有其自身的缺點(diǎn),例如弱的類型檢查機(jī)制等,使得使用C語(yǔ)言開(kāi)發(fā)大型的應(yīng)用程序比較困難。20世紀(jì)80年代,美國(guó)貝爾實(shí)驗(yàn)室的Bjarne Stroustrup博士及其同事在C語(yǔ)言的基礎(chǔ)上引入了面向?qū)ο蟮木幊趟枷牒鸵粋€(gè)class關(guān)鍵字,形成了最早的C++語(yǔ)言原型。
后來(lái),C++語(yǔ)言被融入了越來(lái)越多的語(yǔ)言特性,其中最具有意義、影響最深遠(yuǎn)的莫過(guò)于template(模板)的引入,最終美國(guó)國(guó)家標(biāo)準(zhǔn)化協(xié)會(huì)ANSI(American National Standard Institute)和國(guó)際標(biāo)準(zhǔn)化組織ISO(International Standards Organization)
一起對(duì)C++語(yǔ)言進(jìn)行了標(biāo)準(zhǔn)化工作,并于1998年正式發(fā)布了C++語(yǔ)言的國(guó)際標(biāo)準(zhǔn)ISO/IEC:98-14882。C++已經(jīng)成為最流行的程序設(shè)計(jì)語(yǔ)言之一。C++和C#、Java的區(qū)別很多剛接觸程序設(shè)計(jì)的人經(jīng)常會(huì)問(wèn)“C++和C#、Java有哪些區(qū)別?學(xué)哪個(gè)比較好?”這樣的問(wèn)題。
在網(wǎng)絡(luò)上搜索一下,也不難發(fā)現(xiàn)這個(gè)問(wèn)題已在各大論壇中成為討論的焦點(diǎn)。面向?qū)ο筮€是面向過(guò)程C語(yǔ)言是面向過(guò)程的。C++和C#、Java這3種語(yǔ)言都使用了類似C風(fēng)格的語(yǔ)法,但它們都是面向?qū)ο螅∣OP)的。C/C++語(yǔ)言是對(duì)C語(yǔ)言的一個(gè)擴(kuò)充,也就是說(shuō),一個(gè)C語(yǔ)言的程序,也可以認(rèn)為是一個(gè)C++程序(沒(méi)有用到C++高級(jí)特性而已),C#和Java對(duì)C語(yǔ)言沒(méi)有任何的兼容性。
內(nèi)存管理是否自動(dòng)釋放C++和C#、Java這3種語(yǔ)言中,C++是最早出現(xiàn)的,保持了對(duì)C的兼容性,允許指針的存在,允許程序員手動(dòng)高效地管理、使用內(nèi)存(盡管這也是最容易引起問(wèn)題的地方)。C++在發(fā)展的過(guò)程中,不斷地補(bǔ)充語(yǔ)言特性,使得C++成為最靈活的編程語(yǔ)言之一。#t#
C/C++語(yǔ)言的靈活性是建立在其復(fù)雜的語(yǔ)法之上的,因此對(duì)于初學(xué)者來(lái)說(shuō),很有可能因此望而卻步,但是如果堅(jiān)持下去,就會(huì)發(fā)現(xiàn),再去看C#、Java語(yǔ)法時(shí)會(huì)感到很輕松。
C#、Java語(yǔ)言相對(duì)C++語(yǔ)言來(lái)說(shuō),在語(yǔ)法上要簡(jiǎn)單得多,因此初學(xué)者很容易上手。
二者拋棄了最容易引起問(wèn)題的指針,對(duì)內(nèi)存的管理完全自動(dòng)化,這樣雖然帶來(lái)了程序的穩(wěn)定性和安全性,但是在某種程度上丟失了效率。提示:因?yàn)閮?nèi)存管理自動(dòng)化,C#、Java語(yǔ)言擁有垃圾自動(dòng)回收機(jī)制,在C++中,申請(qǐng)的內(nèi)存必須由程序員自己手動(dòng)釋放,如果忘記這一點(diǎn)就會(huì)引起內(nèi)存泄露。
然而,C/C++語(yǔ)言的復(fù)雜性始終是一個(gè)不可回避的現(xiàn)實(shí)。C++中有大量的陷阱和缺陷,后者導(dǎo)致了數(shù)目驚人的慣用法和workarounds。不加選擇的全盤預(yù)先學(xué)習(xí),是非常糟糕的做法,不僅低效,而且根本沒(méi)有必要,實(shí)在是浪費(fèi)生命。
愛(ài)因斯坦曾經(jīng)說(shuō)過(guò),“我只想知道‘他’(宇宙)的設(shè)計(jì)理念,其它的都是細(xì)節(jié)”。然而,正如另一些讀者指出的,如果對(duì)C++中的這些細(xì)節(jié)事先一點(diǎn)都沒(méi)有概念的話,那么實(shí)際編碼中一旦遇到恐怕就變成沒(méi)頭蒼蠅了,也許到哪里去RTFM都不知道。這也是為什么那么多C++面試都會(huì)不厭其煩地問(wèn)一些有代表性的語(yǔ)言細(xì)節(jié)的原因。
【編輯推薦】