QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2499|回复: 25

请问怎么将 C++ 代码转换为 C 代码?

[复制链接]
发表于 2003-8-8 12:17:17 | 显示全部楼层 |阅读模式
先谢了。
发表于 2003-8-8 13:05:27 | 显示全部楼层
这个…………8知道能不能……
回复

使用道具 举报

发表于 2003-8-8 17:56:32 | 显示全部楼层
这。。。。。。。。。。。。。
class xxxx { }..................这你怎么转?
回复

使用道具 举报

发表于 2003-8-8 18:53:59 | 显示全部楼层
要是用到stl了怎么办啊?
回复

使用道具 举报

 楼主| 发表于 2003-8-8 22:28:46 | 显示全部楼层
各位,据我所知,gcc 在编译C++代码的时候,第一步就是首先将C++代码转换为C代码,而不是直接把C++代码编译为汇编代码。
回复

使用道具 举报

发表于 2003-8-9 04:47:14 | 显示全部楼层
[quote:65ab387537="choujs"]各位,据我所知,gcc 在编译C++代码的时候,第一步就是首先将C++代码转换为C代码,而不是直接把C++代码编译为汇编代码。[/quote]

really? where u find this claim?
回复

使用道具 举报

发表于 2003-8-9 11:23:28 | 显示全部楼层
class xxxx()可以转换为c的struct的
回复

使用道具 举报

发表于 2003-8-9 12:04:30 | 显示全部楼层
那class中的私有方法呢?比如这样:
class A
{
private:
int x(int y);
public:
int z(int q);
int o;
}
这个怎么变成struct??
回复

使用道具 举报

发表于 2003-8-9 13:45:16 | 显示全部楼层
各位,据我所知,gcc 在编译C++代码的时候,第一步就是首先将C++代码转换为C代码,而不是直接把C++代码编译为汇编代码


编译器为什么要将写成的源代码转成汇编代码?不是应该转成二进制代码吗?
回复

使用道具 举报

 楼主| 发表于 2003-8-9 15:34:31 | 显示全部楼层
  C代码的编译是一个分阶段的过程,gcc 本身并不是一个单独的应用程序,而是需要调用其他程序来完成工作。概括来说,分为下列几个阶段:
(1) 预编译阶段(不记得是调哪个程序了),将C代码中的宏定义替换为实际代码。
(2) C代码编译为汇编代码(调用 cc1),可以使用 gcc -S 选项输出汇编代码
(3) 汇编代码编译为目标代码(调用 ar),可以使用 gcc -c 选项输出目标代码
(4) 链接(调用 ln)

至于 默难 所疑惑的私用成员的问题,其实私有成员只有在C++的语法检查器中才有意义,再编译成目标代码后,是不存在什么类、私有成员这些概念的。
回复

使用道具 举报

发表于 2003-8-9 16:16:52 | 显示全部楼层
同意楼上的说法。
回复

使用道具 举报

发表于 2003-8-9 20:12:20 | 显示全部楼层
可能是把一个类实现成一个函数,私有变量成了函数内的变量,公有类成了外部变量
回复

使用道具 举报

 楼主| 发表于 2003-8-10 14:01:38 | 显示全部楼层
不能同意 gxl117 的观点。 C 语言是一个十分完善的语言体系,在逻辑上可以描述所有的算法,C++的功能性描述无法超出C的范畴(事实上C++要比C弱),所不同的只是约束性上的描述,而约束性描述信息并不会带到可执行代码,因此将C++代码转换为C代码是完全可行的。至于说这样叫重写,只是称呼不同,并无本质区别。甚至可以称为“将C++代码编译位C代码”也无不可。
回复

使用道具 举报

发表于 2003-8-10 19:22:38 | 显示全部楼层
一般来说把c++代码转为c代码可以考虑这么几个部分:
1.成员函数变为函数 成员变量变成结构 this指针变成一个此结构的指针来做
2.属性:需要private不要再头文件里声明 public的声明
3.构造/锡沟器:好像在没有编译器的帮助之下 只能限制使用到这些结构的时候 必须调用几个函数来生成 (自动生成和释放在c里面...好像没想到)
4.重载:操作符想不到什么办法 一般的函数的话也比较麻烦 不需要这个属性的话 就小改一下名字 分开就可以了 否则用可变参数(实际上某些情况也无法判断的)
5.继承:现在是以数据结构为核心了 就直接在子结构里加上父结构
还有什么 请大家发言
回复

使用道具 举报

发表于 2003-8-10 20:22:22 | 显示全部楼层
“各位,据我所知,gcc 在编译C++代码的时候,第一步就是首先将C++代码转换为C代码,而不是直接把C++代码编译为汇编代码。 ”



好象他说的是机器自动执行的时候的机理,而不是说人要去重写它
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-15 05:49 , Processed in 0.047711 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表