博客專欄

        EEPW首頁 > 博客 > C語言,是一把中餐廚師的菜刀

        C語言,是一把中餐廚師的菜刀

        發布人:魚鷹談單片機 時間:2021-11-21 來源:工程師 發布文章

        作者:巐歌

        鏈接:https://www.zhihu.com/question/28834538/answer/1654211948

        來源:知乎

        著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

        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能做到的,C++肯定能做,畢竟C++是C超集。而C++能做到的,其實C也能做到,只需要腦補一種編譯范式而已。

        如果非要在哲學上說C和C++有什么區別,那么C是心法派,C++是語法派。

        每當有新概念新范式出現,C++標準組織就會開發新特性新語法,以提供這種新范式。

        而C則腦補一種新的心法(數據結構和算法)來解決,在語法層面盡量少增加特性,幾乎很少變化。

        C和C++又有點像武俠之氣宗和劍宗,入門是氣宗C簡單,入門要學的東西少。

        而劍宗C++不僅要學氣宗的C,還需要學劍宗的這些++,入門就復雜一些。

        修煉進展,是劍宗C++來的快,畢竟有一大堆現成的語法范式,不需要知其所以然,只需會用,就能發揮劍宗招式的威力。而氣宗C還要掌握一大堆基礎數據結構和算法以及設計范式,研究精深,知其所以然,才能真正發揮威力。

        上限,是氣宗C來的高。等真正深入到高階編程,會發現每一種現成的語法范式和庫,某種意義上,便捷的另一面就是束縛。語言編譯器做的工作越多,庫越強大,編程束縛反而越大;而語法越少編譯器越簡單,反而自由度越高而且越穩定可靠,可供發揮的上限也越高。

        對于以C為主的高水平團隊,C現有的語法不是太少,而是多了,反而還要設定一些編程規范加以限制。所以一些真正經典優美的C代碼,往往都是樸實無華的,很少在語句技巧層面炫技。

        以C++為主的高水平團隊,也常常制定編程規范,對語法使用加以限制,限制可能比C更多。

        一個團隊水平高低,從其編程規范就可見一斑。水平越高,往往規矩越多。

        當然,真正的高手,都是氣劍雙修的,在語法層面幾乎都是樸實無華,從不炫技,人家炫的是思想。

        來源:知乎

        版權歸原作者所有,如有侵權,請聯系刪除。

        *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。



        關鍵詞: 編程

        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 白玉县| 陇西县| 增城市| 于田县| 高邑县| 黄陵县| 东兴市| 大宁县| 茌平县| 清新县| 理塘县| 石泉县| SHOW| 波密县| 定结县| 自治县| 新化县| 灌阳县| 常熟市| 柳河县| 丰宁| 自治县| 绍兴县| 成安县| 隆安县| 乳源| 祁门县| 英吉沙县| 藁城市| 南召县| 新和县| 新河县| 荆州市| 苍梧县| 乌兰县| 舟曲县| 临潭县| 和静县| 商南县| 阳春市| 云安县|