從 VC 6.0移植程式碼到 VS C++ 2005得出的一些經驗
最近將一個系統的原始碼從VC 6.0移植到VS C++ 2005上,從而得出了一些經驗。不同編譯平臺的程式碼移植(這裡指從低版本的編譯器往高版本的編譯器之間的程式碼移植),其移植成本主要由兩方面組成,一是系統庫的變化產生的成本,如API函式的變化和類成員函式的變化;二是由於在低版本編譯器寫出的不規範的程式碼產生的成本(一般而言,高版本的編譯器對程式語法的檢查更加嚴格)。分析一下這兩方面的成本,前者是我們第三方開發者不可控制的,後者是我們可以控制的,而且後者產生的編譯錯誤更多,花費的時間更多。通過這次移植,我在想:假如我們在使用VC 6.0開發時遵循一些原則,那麼移植到VS C++2005上就會方便多了。下面是我總結的一些經驗:
1) 儘可能使用標準的C++語法來寫C++程式碼。比如使用標準的C++型別轉換符如staic_cast進行型別轉換,使用標準C庫函式時明確實參型別,比如
long i = 0;
double j = sqrt(i);
上面的兩行程式碼在VC 6.0不會出現編譯錯誤(可能出現一個編譯警告),但在VS 2005中會出現使用sqrt函式不明確的錯誤,為了避免出現這個錯誤,你最好這樣寫:
long i = 0;
double j = sqrt(static_cast
2)假如實現相同的功能,優先考慮使用成熟的開源庫。因為很多成熟開源庫本身有著跨平臺的設計,而且編碼規範,千錘百煉。之前我在VC 6.0上使用msxml4.dll來讀寫xml檔案,移植到VS 2005上,結果因為VS 2005內建了對xml的支援,所以出現很多型別不明確的錯誤(msxml,msxml3不同名稱空間的衝突)。假如我一開始使用tinyxml、libxml等開源庫讀寫xml檔案,到時只需要將這些開原始碼拿到VS 2005上編譯出新的庫檔案就可以了。
3)必須設定函式的返回值,沒有返回值就設為void型別。如果沒有定義函式返回值,VC 6.0會預設為返回int 型別,但VS 2005對此會報錯。
4)儘量使用unicode字符集進行編譯。這是一條推薦原則。眾所周知,VC 6.0預設以多位元組字符集進行編譯。但《Windows核心程式設計》告訴我們使用unicode字符集進行編譯是有諸多好處的:
a. 簡化應用程式本土化的程式碼轉換工作
b. 可以很容易地在不同語言之間進行資料交換
c. 使你能夠分配支援所有語言的單個二進位制.exe檔案和DLL檔案。
d. 提高應用程式的執行效率
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-586868/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- VS2005中檢測和更正 C/C++ 程式碼缺陷C++
- 移植ffmpeg到VC環境心得
- 將 C++程式移植到 Android 平臺C++Android
- 如何將三萬行程式碼從Flow移植到TypeScript?行程TypeScript
- 《不可思議之夢蝶》專案從PC版移植到Nintendo Switch經驗分享
- VC++ 6.0的安裝及使用C++
- VS Code 程式碼片段指南: 從基礎到高階技巧
- 一些通過SAPABAP程式碼審查得出的ABAP程式設計最佳實踐程式設計
- 開發小程式的一些小經驗
- 一些通過SAP ABAP程式碼審查得出的ABAP程式設計最佳實踐程式設計
- 使用VC++6.0 進行圖形介面設計部分控制程式碼的使用方法C++
- Vulkan移植GpuImage(三)從A到C的濾鏡GPUUI
- 從 Flutter 的視訊渲染到 App 落地經驗FlutterAPP
- VS2005(vs2008,vs2010)使用map檔案查詢程式崩潰原因
- 基於Typora的Latex程式碼書寫並移植到word中
- 在VS2017中建立C++的程式碼塊模板C++
- 將30K行Flow程式碼移植到TypeScript - davidgomTypeScriptGo
- 編寫可移植C/C++程式的要點C++
- C++ 從&到&&C++
- Vulkan移植GPUImage(五)從P到Z的濾鏡GPUUI
- Vulkan移植GpuImage(四)從D到O的濾鏡GPUUI
- 微信小程式開發一些經驗微信小程式
- VS error LNK2005:**already defined in **.objErrorOBJ
- 就業寒冬從面試無力感,到一天2個offer的一些經驗分享就業面試
- 我將從VS Code切換到VS Codium
- 從 MVC 到使用 ASP.NET Core 6.0 的最小 APIMVCASP.NETAPI
- 如何把 awk 指令碼移植到 Python指令碼Python
- 從C到C++C++
- vs2005無法附加到程式 系統找不到檔案
- Cloudflare 從 PHP 到 Go:遷移與經驗分享CloudPHPGo
- ReactNative開發的一些經驗React
- 關於Canvas的一些經驗Canvas
- 分享一些閱讀Java相關框架原始碼的經驗Java框架原始碼
- React專案從Javascript到Typescript的遷移經驗總結ReactJavaScriptTypeScript
- Linux 根檔案系統的移植(從入門到精通)Linux
- 低程式碼VS無程式碼
- 效能分析之CPU分析-從CPU呼叫高到具體程式碼行(C/C++)C++
- 驗證碼的前世今生:從圖文識別到無感驗證
- win10執行vc++6.0閃退如何解決_win10開啟vc++6.0結果閃退怎麼處理Win10C++