跨平台C、C++代碼注意的事項,代碼注意事項

來源:互聯網
上載者:User

跨平台C、C++代碼注意的事項,代碼注意事項

        在我們的開發中,跨平台的需求越來越強烈,如何保持C/C++代碼能在多個平台上編譯,是一個比較值得研究的問題。關於跨平台的文章網上很多,跨平台的庫網上也很多。那麼我從自己的跨平台開發經驗談一談自己的心得,希望對大家能夠起到一定的作用。主要涉及到Windows和linux兩個作業系統。

1、  關於路徑和標頭檔路徑分隔字元的問題

在Windows中,正斜杠和反斜線都可以,但是在Linux中,只能是/。

在Windows中,路徑大小寫無所謂,在Linux中嚴格區分大小寫。

2、  char的問題

如果考慮跨平台,需要明確指定是signed或者unsigned,因為不同平台直接聲明char,會導致signed或者unsigned的不確定性。

3、  關於寬字元的問題。

在Windows中,wchar_t佔兩個位元組,Linux中佔四個位元組,但是在Linux可以指定兩個位元組,這樣也會造成一個問題,就是某些第三方庫中wchar_t可能只指定四個位元組的,這樣就會導致不相容。

4、  Linux裡面沒有stricmp函數,在Linux下面是strcasecmp函數比較字串。

5、  與平台相關的調用盡量用宏隔離開來,一般用不同的目錄代表不同平台,BOOST、OGRE等是這樣做,也可以再一個類或者檔案中,這樣會導致到處都是作業系統和編譯器相關宏的定義。

6、  關於標頭檔包含

在Windows下某些C標準庫的標頭檔不用顯式包含,但是在linux下需要顯式包含。所以在.c和.cpp檔案中盡量包含這個檔案中需要的標頭檔。

7、  注意機器大尾端和小尾端的區別

大小尾端對檔案的讀寫會有很大影響,要編寫跨平台c++程式,大小尾端是必須要考慮的問題。比如,你在大尾端機器上寫了一個檔案,然後在小尾端機器上讀取,那麼結果肯定是錯誤的,所以,我們設計檔案格式時,都需要規定檔案是大尾端儲存還是小尾端儲存,或者一個檔案中規定某些部分是大尾端某些部分是小尾端。

8、  盡量只使用STL較早出現的函數或類

較早出現的東西相對來說比較穩定,STL的各個實現基本上都會有實現,這樣跨平台的時候可以相容多個平台。

9、  使用std::exception時需要注意,LINUX下是不支援拋出異常的,如果繼承自標準庫的異常類寫自己的異常類的時候,在Linux下,子類的解構函式中就需要表明不拋出異常,所以解構函式後面加上throw()就可以了。

10、當繼承模板類時。需要謹慎

在自己的代碼中,需要繼承模板類時,如果需要訪問基類模板類的成員函數或者成員變數,前面加上this->。另外,建構函式需要用到基類進行構造時。基類的類型需要需要用該類的型別參數初始化,否則在linux下會提示找不到基類的這個名字。

11、盡量使用標準C和C++的函數以及STL,使用C語言中定義的類型。

12、標頭檔重複包含的問題

         盡量用保衛宏去實現防止標頭檔的重複包含,很多代碼在Windows下直接用#pragma once,這不能保證跨平台需要。

13、關於結構體對齊的問題。

         CPU為了簡化記憶體和CPU之間的處理以及加快CPU從記憶體中取資料的速度,往往都會做一定的對齊,即結構體的各個成員並不是緊湊儲存的,往往在成員中間填充一些位元組。所以,我們一般不推薦用結構體直接讀取和寫入資料,這樣在不同系統或者電腦之間進行移植時,會出現錯誤的結果。

 

其實,這些只是冰山一角,在跨平台C/C++開發上還需要做更多的探索。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.