簡體   English   中英

使用C ++庫

[英]Using C++ libraries

我們整個項目的開發都在C中進行。但是,這里到處都有很多字符串操作,我們需要多加注意..我們最終在字符串操作中遇到了編碼錯誤,並且大多數情況下這導致緩沖區溢出..stack損壞等由於程序員的錯誤。

僅使用C ++字符串類的想法有多好? 因此,僅在我們的項目中介紹使用字符串庫的CPP就是一個好主意嗎? 這會對性能產生影響嗎? 還是不好

請提供您的意見。

為什么不能只使用string.h中的函數?

您是否考慮過用C語言編寫一個簡單的字符串庫,並在需要時進行擴展? 這樣,即使您沒有立即得到正確的解決,您(不同的開發人員)也不會一遍又一遍地犯同樣的錯誤。

或者,您可以僅使C字符串庫成為C ++標准庫字符串類的包裝。

關於C ++(主要是C的超集)的歷史,最令人高興的事情之一就是您可以按照自己的建議輕松使用它。 您將遇到的最大問題是malloc / free與new / delete。

繼續嘗試一下,您沒有損失。

C ++的設計主要是向后兼容的,因此將C項目切換到C ++通常相當容易。 (改變思維方式和編程習慣是另外一回事。)

需要注意的主要事情是:

  • 如果C代碼具有任何聲明為return_type f()的函數(無參數列表),但這些函數確實具有參數,則需要對其進行修復。 在C語言中, f()表示我不告訴參數類型是什么。 在C ++中, f()聲明中的是一樣的f(void)
  • 您必須使用C ++編譯器編譯main() C ++允許在main之前和之后發生一些事情,這可以確保確實發生,正如您的C ++庫可能期望的那樣。
  • 如果某些部分仍將使用C編譯器進行編譯,而僅部分部分將使用C ++編譯器進行編譯,請確保您了解extern "C"規則

在其他一些挑剔的差異中,C和C ++的行為也有所不同,但是它們並不經常引起問題。

開始混用某些C ++是否值得,取決於您和您的團隊。

以我的經驗,即使編譯器升級也經常以意想不到的方式破壞代碼。 此更改是語言更改。 這是一個重大變化。 不引入大量錯誤的可能性是多少,開發人員可能很難發現其中的許多錯誤(但對客戶而言卻很容易)。

另外,我猜測您使用C而不是C ++的主要原因是團隊經驗。 上世紀90年代,我們學會了一種艱難的方法,即將OO和結構化范式混合在一起會比堅持一個或另一個范式引起更多的問題。 如果您的團隊沒有使用C ++的經驗,那么他們會在最不合適和最容易引起錯誤的地方混在一起。

我可以肯定地說,改用C ++編譯器會產生巨大的負面影響。 從長遠來看,您可能會有所收獲,但這可能需要數年的時間。

最好的選擇是編寫一個字符串庫(用C語言編寫),以幫助解決您遇到的問題。 然后,強制您的開發人員使用該庫。 您是否考慮過使用替代安全版本的功能,例如snprintf,strncpy等...,如果您的編譯器尚不具備這些功能,請使用該接口並編寫自己的接口。

如果您真的想使用C ++,請在下一個項目中使用它。 同時,列出此項目的問題清單,以便您可以向管理層推銷C ++是比下一個項目更好的方法。 除非您在編寫設備驅動程序或數學算法,否則這應該很容易做到。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM