程序变换: 转C++为C

简单定义下程序变换:

在不改变功能(输入输出的对应关系)情况下,将程序改变成另一种形式表达。

 

可以看出,程序变换,是一种函数的等价变换。

 

广泛意义看来,所有编译都是变换。

那么,将C++程序转成C的思路,就是针对C++的表达语法,C中没有的或不同语义的,找出相应的等价变换。

 

略微分析一些,如下:

 

// 转struct

struct x {...};  // c++

->

typedef struct tag_x{...} x; // c

 

// 转类

设类为:

class x { ... };

 

对于只会用一个实例对象的类,比较容易:

成员变量 v -> static s_v;

成员函数 f -> x_f // 增加类名作为前缀

 

对于会创建多个实例的类,麻烦一些:

先创建 struct x_s { ... } 将成员变量都封装在结构里面

增加类型:typedef x_s * x_handle;

创建函数:x_handle x_init(...);

析构函数:void x_down(x_handle h);

公共函数:f(...) -> x_f(x_handle h, ...);

私有函数:f(...) -> static xs_f(x_handle h, ...);

 

// 其他

其他诸如变量说明,以及函数重载,模板等,大家找出合理的命名规则,转换步骤,都是可以的。

 

有朋友也许会问:

怎么不用工具转换呢?

应该来说,早期的C++是先编译成C再进行编译成抽象机中间代码的。不过,那些都是给编译器看的C符号,人看不惯。要有可维护性,估计现在还只能人来干。

 

#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值