本文共 1614 字,大约阅读时间需要 5 分钟。
2 的C++移植的一些常见问题
unix下的我已经记不清楚了, 总之因为原来的程序是用makefile的形式编译的, 虽然VC也支持makefile的形式, 但是无论如何在给原来的unix的编译器用的 makefile是不可能直接给VC的编译器用, 而想去了解 makefile 文件的语法和如何实现相当的功能是一件吃力不讨好的事。所以我最后在VC下用了 Console 程序的形式 来完成程序的移植工作, 当然用其它的形式如 MFC AppWized ...也是可以的, 反正对于每个程序员而言掌握方法以后,爱出什么招都无所谓。 常见问题1: 1 文件扩展名, 很奇怪? 大多数的编译器对.cpp 和 .c 文件的处理是不一样的, 但是也有例外时候, 所以有时你要把.c 的改成 .cpp来用。 2 #include "stdAfx.h" 加到 .cpp 文件的前面, 当然不加也可以, 你只要在 工程设置的地方说明一下该cpp文件, not using precompiled headers 或 Automatic use of precompiled headers; 3 模板类的应用, 一般模板类的实现代码需要写到.h 文件中,或在.h中include .cpp 但这样对程序员来说会觉得很不舒服, 用 makefile 的方式可以解决这个 问题, 但是在VC下又不用makefile,就只有用以上的方法来修改改那些模板类 的代码了,顺便提一下用g++的编译器我也是觉得用在.h中include .cpp 的方法 好一些。 4 数据类型的冲突, 重定义, 在国外的大公司在写程序时一般都有这样的习惯: 定义 自己的数据类型, 如定 INT, DOUBLE, BOOL 等之类的数据类型,然后把这些定义放在 BaseType.h 之类的文件中, 然后在时都是用自己定义的数据来完成,我认为这是一个很好的习惯, 因为你很难预料你写的程序会在不同的平台上跑(16位机, 32位机, 64位机...),用不同的编译器,这样做增强了程序的适应性, 当然有时候这也会引起麻烦, 如BOOL不就是在VC中有定义吗?这类问题在知道问题所在以后就很容易解决了。 5 变量初始化, 如这样的代码 int* pInt(NULL), 要改为 int* pInt = (NULL); 等如此类的修改。 6 还有一种常见问题就是link过程中找不到定义或定位不到具体的实现代码之类的或重义的情况, 这样情况解决就看具体的原因了, 很没有什么一劳永逸的方法。 7 与特定的或其它的支持环境相关的方法, 这类问题的解决与移植程序要达到什么的目标有很大的关系, 有时可能很容易的解决了, 有时又很难解决。比如有关X11也就是关于 X Window的图形系统的,有一定的情况下可以用把X11库拷过来, 做一下compile 可以但是要做到 link 成功, 就不容易反正在VC下我是没有成功的把含x11应用程序link完成。以上是我在以前的做移植的工作常见的一些问题, 对于前六种情况的处理非常容易,不花多少时间就可以处理完了,这种问题都是第一次处理的时候需要花些时间,以后碰到都是照旧的方法办就可以,第7种情况就有时就较难处理一些。 因为间隔时间较长可能还有一些内容已经忘了,另外可能还有更好的处理方法我不知道, 有什么不对的地方还希望大家多多指正。 梁 2001/05/15
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10748419/viewspace-984978/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/10748419/viewspace-984978/