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