Tag: 程序转换

将C源代码转换为C ++

你会如何将相当大的(> 300K),相当成熟的C代码转换为C ++? CI所考虑的types被分割成大致对应于模块的文件(即,比典型的基于OO类的分解更小的粒度),使用内部链接来代替私人function和数据,以及用于公共function和数据的外部链接。 全局variables被广泛用于模块之间的通信。 有一个非常广泛的集成testing套件可用,但没有单位(即模块)级别的testing。 我想到一个总的策略: 在C ++的C子集中编译所有东西,并使其工作。 将模块转换为巨大的类,以便所有的交叉引用都以类名称作为范围,但将所有函数和数据作为静态成员,并使其工作。 通过适当的构造函数和初始化的交叉引用将巨大的类转换为实例; 用适当的间接访问replace静态成员访问; 并得到那个工作。 现在,将项目作为一个不适当的OO应用程序来处理,然后编写unit testing,在依赖关系易于处理的地方进行分解,然后将其分解成不同的类。 这里的目标是在每次转换时从一个工作程序转到另一个工作程序。 显然,这将是相当多的工作。 这种翻译有没有案例研究/战争故事? 替代策略? 其他有用的build议? 注1:该程序是一个编译器,可能数以百万计的其他程序依赖于其行为不变,所以批量重写几乎不是一个选项。 注2:来源近20岁,每年可能有30%的代码stream失(线路修改+增加/以前的总线)。 换句话说,它被大量维护和扩展。 因此,其中一个目标是提高可信度。 [为了这个问题,假定C ++的转换是强制性的,而把它留在C中不是一个选项。 增加这个条件的意思就是去掉“把它留在C中”的答案。]