1. gzyueqian
      13352868059

      嵌入式開發:在嵌入式應用程序中混合C和C++

      更新時間: 2023-02-23 11:16:54來源: 粵嵌教育瀏覽量:7293

        許多嵌入式應用程序仍使用c語言編寫,但越來越多的嵌入式開發人員現在使用C++語言編寫程序。某些應用程序甚至共享這兩種語言。這有意義嗎?

        C是嵌入式應用中最常用的編程語言。多年來,人們一直期待著向C++過渡,但過渡速度相當緩慢。但是,許多開發人員正在考慮或計劃這樣做。C++實質上是c的超集。因此,這兩種語言完全可以混合使用。

        雖然c和C++可以混合使用,但有三個問題:

        為什么要這么做?

        怎么做?

        有什么缺點或問題嗎?

        為什么在嵌入式應用程序中混合使用C和C++代碼?

        簡單的答案是遺留代碼。一個新項目很少從頭開始。如果是這樣,嵌入式開發人員可以用C++編寫所有內容。

        然而,更合理的出發點和更可能的是重用現有代碼,無論是從內部還是外部源代碼。這段代碼是C。因此,要繼續使用C++,這兩種語言的混合幾乎是不可避免的。

        

        如何混合C和C++代碼?

        C和C++共存有兩種基本方式:

        方法A:混合代碼的明顯方法是嵌入式開發人員用自己的編譯器編譯每個模塊,然后將所有對象模塊連接在一起。然而,這會立即導致一個問題:報告鏈接錯誤。這是因為C++編譯器更改了函數的名稱,這被稱為“mangling”。

        這些更改生成由原始標識符和函數參數的數量和類型的組合組成的唯一名稱。這有兩個原因:第一,當函數聲明、定義和調用不匹配時,會發生鏈接錯誤。[這被稱為“類型安全鏈接”。]其次,它有助于重載函數,其中兩個函數具有相同的名稱,但具有不同的參數組合;“mangling”使每個名稱都唯一。

        這個問題可以用外部C結構來解決。使用此限定符聲明C++函數意味著其名稱不會更改。C函數的外部聲明應用程序確保C++編譯器不會管理對該函數的調用。

        方法B:另一種方法是使用C++編譯器編譯C代碼,即將其視為C++代碼。如果C是C++的真正子集,這將無縫地工作。事實上,嵌入式開發人員需要非常小心地“清理”代碼并確保它真正兼容。

        混合C和C++代碼有什么缺點嗎?

        混合這兩種語言的缺點很少。在方法A中,存在類型安全鏈接丟失的問題。然而,這只適用于從C++調用的C函數,反之亦然。其他C++函數不受影響。當然,公共函數不能重載。

        從長遠來看,方法B的應用更好,因為一旦清理干凈,代碼就可以被當作C++處理,并且可以使用該語言的函數。

        如前所述,清潔過程并不簡單。因此,嵌入式開發人員必須權衡工作的成本效益比率和未來使用遺留代碼的可能性。

      免費預約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 午夜中文乱码福利 | 亚洲日本aⅴ片在线观看 | 日韩欧美中文字幕一本 | 亚洲成E人在线免费观看 | 亚洲欧美日韩高清一区二区 | 宅男网免费在线无毒不卡 |