关于C++ 代码的移植性
读《Java有用论》 有感,其中说起 C++ 的话题,其中一个话题就是: "C++恐怕种类也不少" ,这可真是很大错误,可能大家对 ansi C++ 的认识有一些偏差,难道用VC 写的程序因为有很多如,WinMain(...) 之类和Windows 系统相关不是 ansi C++ 中所定义标准函数就是一种新的C++ 了吗,当然不是?平心而论 Micrsoft 是在VC 中加入了不少非 ansi C++的东西, 但是比起Borland的C++ Build 还是差远了。但是我的主题不是讨论这些而是 C++ 代码在不同平台上的移植性。我只要说明一点:C++ 的代码的移植并不是如很多人所想的那样困难重重,前提是你要熟C++ 和你用的编译器(废话)。
我曾经移植过很多的原来在Sun的服务器上 Unix 操作系统跑的程序到 Windows NT, Windows 9.X 平台上来,很多程序就是:几十M 以上的源程序,过千的Class,工具就是 VC。我的感觉就是:1 如果只是算法,没有特定的系统调用,很容易几乎一拿过来就可以跑,难度系数为 0.5(注:10分为满分,代表"不可能完成的任务"), 因为毕竟不同的编译器之间总会有一些小的差别,完全不用改是不可能的; 2 有系统调用,也很容易,把unix 下的.h 拷过来不就很了吗,有些函数实在不行就在VC 自己写一个些了吧,不难真的,而且出现这种情况也不多, 难度各系数为 1.0; 3 有X11 图形系统,这可有些困难,但是看你是否想照搬unix 的界面到Windows上,这时难度系数接近10, 重写界面,保留其它,这就好办多了,就算你的程序中一部分的方法是与X11相关,没关系,你大多数情况下可以在 Windows系统中找到几乎一样的方法,实在没有处理方法参照上例,这时难度系数在 2~4之间。
反过来Windows To unix & linux 呢; 情况也 unix To Windows 一样,只是很多情况下界面的转换的难度系数为10, 你想过在linux 或 unix下用Micrsoft 的经典的多文档结构吗? 很难想象吧, 但是用这种结构的Windows程序又很多, 还是写新的界面吧! 还有一个例子很能说明问题,我很喜欢用VC编写、编译、调试linux 或 unix 的程序,用telnet + ftp 在unix 上再做link , 当然你如果感觉unix或linux 上的C++ IDE更好用的话,那就当我没说,我想说明的只是至少VC写的源程序可以直接在unix 上编译并跑起来。
总结:C++代码移植是很强,在一些情况下也可以说是平台无关,但是如果程序对特定系统的特定环境依赖很强的话,说实话是有难度,有时难度还很大。但是从整体而言,结论还是:C++代码移植是很强。
梁 2001/4/25