做嵌入式編程,為什麼用的是C語言而不是C++呢?

2020-12-19 騰訊網

1.前言

幾十年來,嵌入式軟體工程師們一直在爭論是否應該使用C++替代C語言進行開發工作。根據2019年IEEE和github的市場調查顯示,微控制器製造商提供的軟體大部分都是由C語言編寫。

事實上,56%的嵌入式軟體是用C語言編寫的。然而,C++已經逐漸普及,大約23%的新嵌入式軟體項目都是用C++編寫的。C語言發展到現在,差不多50年的時間了,現在正是c語言過渡到C++語言成為嵌入式開發主流語言的最佳契機。

對於習慣了用C語言開發的嵌入式程式設計師來說,對C++語言是有一些誤解和偏見的。

(1)C++執行效率低

(2)C++生成的目標代碼大

(3)C++編程非常麻煩

(4)沒有指針概念,操作底層寄存器很複雜

我認為,嵌入式工程師是應該好好去學習一下C++語言開發嵌入式程序的,ARM的Mbed OS中也大量採用了C++程式語言。拒絕接受新的事物,害怕推翻舊有思維,固步自封,這樣才可怕。

嵌入式工程師從C到C++的轉換,需要學習的不僅僅是一門新的語言,而實際上學習的是一種編程思維模式。就像剛開始學習嵌入式從裸機代碼開始,然後慢慢學習RTOS或者Linux,這不僅僅是接觸新的東西,更是一種思維方式的轉變。學習C++需要理解的是面向對象的思維方式,還有各種設計模式。從而在使用嵌入式開發的過程中,這些東西都是一種會用到的。

下面從三個方面來說說嵌入式開發中採用C++編程的好處。

2.引進新的設計模式

C語言在一定程度上為開發人員提供了一系列的封裝函數可以使用,也提供了非常基本的多態的功能。然而C語言實際上是一種面向過程的語言,這種就使得組合和繼承變得十分的困難。這些都會影響到總體設計架構的穩定性。除非是一個C語言基礎以及做過許多項目的人,才能很好的掌握C語言架構的設計。一般的設計都會讓軟體函數的復用和擴展變得極其複雜。

而C++則為開發人員提供了真正面向對象的設計模式,這種抽象的模塊,使得程序的耦合性更低。由於引腳了設計模式,所以在項目工程的移植上也十分的方便,這使得軟體的復用性更好,這樣可以加快產品的開發速度,縮短研發周期,降低工作量。

3.C++是一種不斷更新的語言

在如今複雜的開發環境中,隨著時代的發展,越來越多先進的硬體解決方案被提出,所以需要更好用的軟體和語言解決方案,這就意味著程式語言必須是不斷的更新的,不斷為開發人員提供最好的最先進的工具。

我們來看一下C/C++版本的更迭情況:

C語言版本更迭:

C++語言版本更迭:

C++語言的更新與C語言不同的是,C++不僅僅是修復了一些錯誤,更重要的是添加了一些新的特性和工具。而且從更新頻率上來說,C++的更新最近都是大概每三年更新一次。這可以很方便的適應新的系統和硬體平臺。

4.C++有著更加豐富的特性

嵌入式編程過程中,相比於用C語言,C++有著更多的特性。現在的編譯器已經對程式語言的優化非常的友好了。

C++中也是支持C語言操作的,所以這種方式也很十分容易的從C到C++的過渡。

支持異常處理和錯誤捕捉,這是在嵌入式開發過程中非常高效的

支持虛函數

支持動態類型轉換,多重繼承,多態等。

雖然會相對於C語言來說,會增加一些資源,但對於現在的嵌入式開發來說,多幾KB已經不是什麼問題了,嵌入式上使用C++編程卻可以很容易的實現功能。大大提高開發效率。

5.總結

雖然目前來看,做嵌入式編程的主流語言還是C語言,但是卻不能迴避一個事實,在github上搜索嵌入式的工程的時候,越來越多的工程採用了C++進行編程。畢竟在嵌入式語言佔比中也接近1/4的比例了。所以嵌入式開發需要去學習C++編程,並理解C++編程的思想。隨著時代的進步,處理器的發展,越來越多新的特性被提出,相信只有與時俱進才能做時代的先鋒。

相關焦點

  • 手機APP都是用什麼程式語言寫的呢
    打開APP 手機APP都是用什麼程式語言寫的呢 C語言與程序設計 發表於 2020-12-24 17:05:28   今天想和大家分享的內容是和我們手機上APP相關的,它們都是用什麼程式語言寫的呢?
  • 編程大佬總結的50點學習C+的方法,一針見血,少走彎路
    1.把c++當成一門新的語言學習(和c沒啥關係!真的。)25.和別人一起討論有意義的c++知識點,而不是爭吵xx行不行或者yy與zz哪個好; 26.請看《程序設計實踐》,並嚴格的按照其要求去做; 27.不要因為c和c++中有一些語法和關鍵字看上去相同,就認為它們的意義和作用完全一樣; 28.c++絕不是所謂的c的「擴充」——如果c++一開始就起名叫
  • 程式語言學哪個比較好?2019年最實用的程式語言
    學習編程關鍵是要找到一種合適的語言,那麼程式語言那麼多,該如何選擇?下面萬古網校小編為大家分享一篇關於程式語言選擇的文章,希望能給你帶來幫助!第一大類語言包括Java、C、Python和C++。這類語言都是非常通用的語言,它們並不局限於特定的編程平臺或用途。
  • 如何用C語言實現面向對象編程OOP?
    如何用C語言實現面向對象編程OOP? 嵌入式資訊精選 發表於 2020-12-18 16:18:19 解釋區分一下C語言和OOP我們經常說C語言是面向過程的,而C++是面向對象的,然而何為面向對象,什麼又是面向過程呢?
  • 被雙十一套路所傷的,請到這裡取暖——「 用 C語言編寫自己的程式語言 」
    是的!這樣的程式設計師終極裝逼課!好了,上面扯了這麼多,接下來就給大家介紹下這門終極裝逼課——「用 C語言編寫自己的程式語言」。如果你的目標不僅僅是一個碼農,而是軟體工程師,那你應該好好看看本課,相信會對你了解程式語言的設計思想,實現高質量編程會有很大的幫助。1. 內容簡介我們在學習程式語言的時候會學到很多的語法規則,很多巧妙的用法,這些都是怎麼實現的?
  • 單片機C語言模塊化編程方法
    初學者往往搞不懂如何模塊化編程,其實它是簡單易學,而且又是組織良好程序結構行之有效的方法之一.本文將先大概講一下模塊化的方法和注意事項,最後將以初學者使用最廣的keil c編譯器為例,給出模塊化編程的詳細步驟。
  • Zig 0.7.1 發布,想要替換 C 的程式語言
    其中涉及到標準庫、編譯器、構建系統、compiler-rt、zig cc 和 zig c++ 等內容。Zig 是一門通用程式語言,專為穩定性、可維護性和性能而設計,追求替代 C 語言在系統編程上的最佳地位。
  • keil C語言與彙編語言混合編程
    有參數傳遞的函數調用 記住哦,c文件和A51文件不能使用同一個文件名,不過我還不知道為什麼會這樣,有高手知道得話請告知。 今天說說帶參數傳遞的函數調用,在C51和彙編之間傳遞參數的方式有兩種,一種是通過寄存器傳遞參數,C51中不同類型的實參會存入相應的寄存器,在彙編中只需對相應寄存器進行操作,即達到傳遞參數的目的。
  • 什麼是腳本語言,你用過哪些腳本語言
    4、腳本語言是一種解釋性的語言,例如Python、vbscript,javascript,installshield script,ActionScript等等,它不象c\c++等可以編譯成二進位代碼,以可執行文件的形式存在,腳本語言不需要編譯,可以直接用,由解釋器來負責解釋。5、腳本語言一般都是以文本形式存在,類似於一種命令。
  • 工控上位機編程學習技巧
    .NET程序設計技術內幕---Jeff Prosise---.NET平臺四大天王.NET本質論--第1卷:公共語言運行庫(中文版)---Chris Sells---.NET平臺四大天王C++程序設計語言(特別版)---c++八大金剛----Bjarne Stroustrup「C++之父」C++ Primer (第3版)中文版----c++八大金剛
  • 推薦幾款可以直接在手機上編程的app(包含Java、C、Python等)
    2.C語言:c語言編譯器、C4droid。3.python:QPython3、Termux。」,搜索「C語言編譯器」,如下,直接點擊下載安裝:c4droid)和qt(nokia官方開發庫,需安裝sdl plugin for c4droid)。
  • 單片機的程式語言:彙編語言、C語言、PL/M和BASIC語言
    幾十年來,BASIC語言一直被認為是初學者編程的語言。它已經由QBASIC發展到VB#版本,具備了很多結構化思想和編程方式,如函數、模塊、局部變量、全局變量、數據傳遞等。早期的BASIC語言由於生成的代碼不是最終目標機器的代碼,而是經過一個RUNTIME程序解釋後運行的,所以執行效率低,但這種逐行解釋的方法很容易找到程序中的錯誤,而不是當程序執行完才能顯現出來。
  • keil c語言編程常見問題解析(一)
    一起走向智能工業革命時代,單片機DIY、基於c語言/彙編的編程。\ds18b20start.obj (DS18B20c/c++語言中有很多地方要用到extern,但是如果沒有真正的了解它的意義,會給編程帶來很大的麻煩,為了使大家少走彎路,特祥細的說明一下。      對於比較小的程序,一般只有一個c文件和一個頭文件,全局變量我們通常會直接定義在c文件中,在程序之前加int i定義。
  • 單片機程式語言的比較
    例如,懂得彙編語言指令就可以使用在片內ram作變量的優勢,因為片外變量需要幾條指令才能設置累加器和數據指針進行存取。同樣的,當要求使用浮點數和啟用函數時也只有具備彙編編程經驗才能避免生成龐大的、效率低的程序,對於這方面的編程,沒有彙編語言是做不到的。
  • (精華)C語言為什麼一般不在.h中定義函數或者變量?
    大部分C編程愛好者都知道,在我們的.h文件裡面經常看到的是函數的聲明、變量的聲明、以及各種各樣的宏等等,而且在我前面的文章中我也提到過C語言的模塊化設計中常常說到對應的.h和.c文件認為是一個對象,那麼.h文件主要是對外的一些接口
  • Python和C/C++交互的幾種方法總結
    來源:http://code.replays.net/201706/95155.htmlPython程式語言Python 是一種面向對象、解釋型電腦程式設計語言,由Guido van Rossum於1989年底發明,第一個公開發行版發行於1991年。Python語法簡潔而清晰,具有豐富和強大的類庫。
  • 編程入門技巧大全!
    C++程序設計語言(特別版)---c++八大金剛----Bjarne Stroustrup「C++之父」C++ Primer (第3版)中文版----c++八大金剛---Stanley B.LippmanC++ Primer(第4版)中文版----c++八大金剛---Stanley B.LippmanC++標準程序庫—自修教程與參考手冊--c++
  • C語言學習到底難不難呢?過來人告訴你,其實不是很難
    很多人道聽途說,以為C語言很難,C語言其實只是一門語言,也是人們開發的一種面向過程的計算機程式語言。C語言還是非常基礎的,而且應用很廣泛,比如一些應用軟體、系統軟體、圖像處理、數字計算、遊戲軟體開發等,以及嵌入式軟體開發,比如含有處理器的電子產品等。
  • 想學編程?先來理解一下C語言的Helloworld程序吧
    C語言作為一門計算機科學歷史上裡程碑式的程式語言,現在依然被廣泛使用。其功能強大,內容簡單,想學習編程的小夥伴們不妨先學習一下C語言。本文將介紹一下K&R所寫的經典程序:Helloworld的簡要分析。
  • C語言入門級教程:基礎數據類型與基本算法,學編程從此刻開始!
    ● 指針類型 指針是C語言的精華所在,許多程式語言中都支持某種形式的指針,但最著名的是C語言。 指針的特殊性在於它的值是一個內存地址。關於指針後面我們會詳細說明。