作者:朱金灿

来源:blog.csdn.net/clever101

最近将一个系统的源码从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<double>(i));

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. 提高应用程序的运行效率

转载于:https://www.cnblogs.com/lanzhi/archive/2009/03/12/6471166.html

从VC 6.0移植代码到VS C++ 2005得出的一些经验相关推荐

  1. VC++6.0显示代码行号【成功破解行数显示限制,完全免费!!!】

    VC++6.0作为一款比较古老的编码IDE,软件本身不带代码行显示,这一点灰常不好! 查看了CSDN上几乎所有的博客,如果想要不花币,只能通过未破解版的行数显示插件在IDE上显示500行. 这让我灰常 ...

  2. 将VC++6.0的代码迁移到VS2005常见问题总结(Window核心编程第五版以前代码在VS2005无法编译的解决方案)...

    额喜新厌旧是男人的通病吧,可是呢VS2005的界面看着的确比VC6.0看着舒服,而且也算用习惯了吧.可是网上现在大部分C/C++的代码还是用VC6.0的.这为我们这些菜鸟的学习之路增添了不少障碍,可能 ...

  3. 解决由VC++6.0移植到VS2019带来的兼容问题

    输出字符一律变成兼容形式:(_T("test")) 在VS2019中,sscanf不通过编译,只有改成sscanf_s(means safe)后才通过.sscanf_s的参数和ss ...

  4. VC++6.0 win32 控制台应用程序 简单应用 附代码

    **VC++6.0 win32 控制台应用程序 简单应用 附代码 ** .cpp 文件名 注意:在源文件添加如下声明: #include //没有.h using namespace std;//使用 ...

  5. VC++6.0新建C语言项目以及代码运行

    打开VC++6.0 点击左上角"文件"(file),下拉菜单选择"新建"(new) 在弹出的对话框中选择"工程"选项卡下的"win ...

  6. VC++6.0 QQ自动发起远程协助(超简单10多行代码)

    这几天要在公司远程家里的电脑,家里的电脑是使用路由器拨号的.所以远程桌面遇到了那个经典的问题IP IP IP 是动态的怎么办??????, 查了点资料又花生壳的等..映射动态IP的试下好像不太管用.公 ...

  7. 怎么建立工程和源代码文件在VC++6.0 中

    http://jingyan.baidu.com/article/cbcede0713189b02f40b4d1c.html 一.建立工程的步骤. 1 首先,打开VC++6.0软件,点击菜单栏上的&q ...

  8. 基于STM32F1自写移植代码分享系列之0.96寸OLED模块

    基于STM32F1自写移植代码分享系列之0.96寸OLED模块 文章目录 基于STM32F1自写移植代码分享系列之0.96寸OLED模块 文件获取 文件使用方法 参数配置 引脚配置 函数介绍 函数说明 ...

  9. 从VC++到GCC移植:谈两者的语法差异

    从VC++到GCC移植:谈两者的语法差异 许式伟 (版权声明) 2007-1-28 类型引用 template <class T> class  Foo {     typedef T:: ...

最新文章

  1. 最大权值闭合子图的证明详解
  2. mysql cpu占用率过高,MySQL高CPU使用率
  3. Intelligent Factorial Factorization LightOJ - 1035(水题)
  4. 4位加法器的设计代码verilog_HDLBits:在线学习Verilog(六 · Problem 25-29)
  5. [渝粤教育] 中国地质大学 自动控制原理 复习题 (2)
  6. 1、Docker部署及基础理论
  7. YUV格式学习:Y转换成RGB24
  8. php备份远程系统快照,ZFS snapshot高级篇之快照备份
  9. 如何编写字符设备驱动
  10. kubernetes视频教程笔记 (37)-部署 EFK 平台 日志收集 展示
  11. 万能工具,完全免费实现各种超实用功能
  12. Fedora Linux 14百度云下载,Fedora Linux 14下载
  13. Sketch2AE插件(Sketch文件导入AE)最新破解版
  14. java-word模板导出
  15. EM78P153单片机构成433MHz发射电路
  16. selenium录制百度3D地图
  17. mybati-plus自定义sql异常Invalid bound statement (not found)封装的sql查询正常
  18. 给出一个正整数,求出它是几位数,逆序输出各位数字,顺序输出各位数字。
  19. 【CTF题解NO.00008】mini-LCTF 2021 official write up by arttnba3
  20. 赛灵思 Xilinx UG1387 - Versal ACAP 硬件、IP 和平台开发方法指南(中文版) (v2020.2)

热门文章

  1. 在测试时用到的一些mysql的小技巧(持续更新)
  2. javascript ES6
  3. dubbo 源码编译记录
  4. 自制奇葩vb面试题,看你能对几道
  5. Linux C SQLite3 编程
  6. 迭代器、代码块、闭包
  7. Oracle安装ORA-12154和ORA-12169问题的解决
  8. Jenkins报错‘Gradle build daemon disappeared unexpectedly‘的问题解决
  9. 微信小程序首页index.js获取不到app.js中动态设置的globalData的原因以及解决方法
  10. java.lang.classnotfoundexception解决方法