c++ 讀作“c加加”,是“c plus plus”的簡稱。顧名思義,c++ 是在c語言的基礎上增加新特性,玩出了新花樣,是以叫“c plus plus”,就像 iphone 7s 和 iphone 7、win10 和 win7 的關系。
從文法上看,c語言是 c++ 的一部分,c語言代碼幾乎不用修改就能夠以 c++ 的方式編譯,這給很多初學者帶來了不小的困惑,學習 c++ 之前到底要不要先學習c語言呢?
我對這個問題保持中立,但是初學者直接學習 c++ 會非常吃力,hold 不住,尤其是對計算機記憶體不太了解的情況下,c++ 是學不懂的。c++ 是一門靈活多變、特性豐富的語言,同時也意味着比較複雜,不易掌握。
不過可以明确地說:學了c語言就相當于學了 c++ 的一半,從c語言轉向 c++ 時,不需要再從頭開始,接着c語言往下學就可以,是以我強烈建議先學c語言再學 c++。
現在看來,c++ 和c語言雖然是兩門獨立的語言,但是它們卻有着扯也扯不清的關系。
早期并沒有“c++”這個名字,而是叫做“帶類的c”。“帶類的c”是作為c語言的一個擴充和補充出現的,它增加了很多新的文法,目的是提高開發效率,如果你有 java web 開發經驗,那麼你可以将它們的關系與 servlet 和 jsp 的關系類比。
這個時期的 c++ 非常粗糙,僅支援簡單的面向對象程式設計,也沒有自己的編譯器,而是通過一個預處理程式(名字叫 cfront),先将 c++ 代碼”翻譯“為c語言代碼,再通過c語言編譯器合成最終的程式。
随着 c++ 的流行,它的文法也越來越強大,已經能夠很完善的支援面向過程程式設計、面向對象程式設計(oop)和泛型程式設計,幾乎成了一門獨立的語言,擁有了自己的編譯方式。
我們很難說 c++ 擁有獨立的編譯器,例如 windows 下的微軟編譯器(cl.exe)、linux 下的 gcc 編譯器、mac 下的 clang 編譯器(已經是 xcode 預設編譯器,雄心勃勃,立志超越 gcc),它們都同時支援c語言和 c++,統稱為 c/c++ 編譯器。對于c語言代碼,它們按照c語言的方式來編譯;對于 c++ 代碼,就按照 c++ 的方式編譯。
從表面上看,c、c++ 代碼使用同一個編譯器來編譯,是以上面我們說“後期的 c++ 擁有了自己的編譯方式”,而沒有說“c++ 擁有了獨立的編譯器”。
如果針對沒有任何程式設計經驗的讀者寫一本 c++ 的書,那将是一項不小的任務,寫出來的書也會非常厚。即使這樣,也僅僅是在講文法。
更重要的是,這些知識你很難全部吸收,會嚴重打擊你的信心,失去學習的興趣。
沒有任何程式設計基礎的讀者,我建議先從c語言學起,不要貪多嚼不爛。有程式設計基礎的讀者,相信你自己能做出正确的判斷。
學習程式設計是一個循序漸進的過程,不要期望一口吃個胖子。學習c語言,一來是學習它的文法,為 c++ 打基礎,同時培養程式設計興趣,二來是學習記憶體、編譯和連結,弄清程式設計語言的内在機理。
每個初學者都經曆過這樣的窘境:已經學習了文法,明白了程式設計語言都有什麼,也按照教程敲了不少代碼,但是遇到實際問題就挂了,沒有思路,不知道從何下手。說白了就是隻會學不會用。
究其原因,就是實踐少,沒有培養起程式設計思維!學習知識容易,運用知識難!
等你熟悉了c語言,能編寫出上百行的代碼,就對程式設計有些概念了。這個時候再去了解 c++ 究竟在c語言基礎上增加了什麼,你就站在了一定的高度。
從“學院派”的角度來說,c++ 支援面向過程程式設計、面向對象程式設計和泛型程式設計,而c語言僅支援面向過程程式設計。就面向過程程式設計而言,c++ 和c幾乎是一樣的,是以學習了c語言,也就學習了 c++ 的一半,不需要從頭再來。