QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: choujs

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

[复制链接]
 楼主| 发表于 2003-8-11 11:34:54 | 显示全部楼层
执着于概念的含义是一个比较无聊的问题。“编译”本身当然是一种转换(conversion),而不能称为一种重写(rewrite)。rewrite是机器无法完成的(至少目前是这样)。如果使用C语言重写C++代码,在完成同样目标的情况下,效率要高得多。这就是为什么我们有时候会要求用汇编代码重写某些C函数的原因。
我自认为对C++和C的概念还是很了解的,对面向对象的概念也十分清楚。但是我要说明的事,无论是C++还是C语言写的代码,都不是真正的“程序”,而只是“程序”的一种描述形式,这一点,所有的程序员都不可不知(尽管很多人常常忘记这一点)。只有CPU可执行的二进制代码,才是程序的真正面目。因此,无论是用C++语言描述的代码,还是C语言描述的代码,只要最终得到的逻辑是一样的,我们就可以说他们是一样的代码,conversion是绝对可以成立的。
我前面已经说过,私有成员、公有成员、继承这些概念只对C++编译器有意义,而对“程序”本身没有任何意义。
另外需要说明的是,translate(翻译)本身已经包含转换的含义(trans)。
回复

使用道具 举报

发表于 2003-8-11 12:38:00 | 显示全部楼层
C 语言是一个十分完善的语言体系,在逻辑上可以描述所有的算法,C++的功能性描述无法超出C的范畴(事实上C++要比C弱)

C++把C作为子集实现,在效率上稍逊,但对问题的描述上不见得弱,充其量不用C++的特性。
回复

使用道具 举报

 楼主| 发表于 2003-8-11 20:27:53 | 显示全部楼层
“此时的代码除了最终实现的功能外与原来的代码已经没有一点关系了。”

所以我说很多人经常忘记“程序”的本质。面向对象的编程方法固然有这样那样的优点,但是这些优点只对“人”有异议,而对“机器”则没有意义。无论是使用什么语言,最终的目的都是为了获得“机器”可以使用的语言,这是我所说的“转换”的基础。编程思想只是一种手段,而不是目的。我认为,作为一个软件开发人员,首先应该认清楚的是你的“目标”,而不是你需要使用的手段。因此,一味强调编程思想的重要性是不可取的。
我发现我们在这个问题上的分歧正在于此,我认为代码是可以转换为其它语言的,因为对我来说最重要的是最后得到的“程序”,我认为只要最终结果是一样的,两个代码就是等价的;而你认为是不可转换的,恐怕是把“编程思想”放在第一位了,你认为编程思想不一样,他们就已经不等价了。
回复

使用道具 举报

发表于 2003-8-11 21:18:57 | 显示全部楼层
作为一个软件开发人员,首先应该认清楚的是你的“目标”,而不是你需要使用的手段。因此,一味强调编程思想的重要性是不可取的。



人和机器的区别就是人有思想嘛
我们的目的是让机器为我们服务,而不是什么机器码
回复

使用道具 举报

发表于 2003-8-12 06:31:25 | 显示全部楼层
回复

使用道具 举报

发表于 2003-8-12 08:41:09 | 显示全部楼层
to choujs:
我只听说过 C Front 是把C++转换成C的,以后的编译器都是直接编译的,你的消息是从哪听的?
cpp是预编译器,gas是汇编器,ld是连接器,你说的ar是一个归档程序,ln是创建文件连接(或符号连接)的程序。

to gxl117:
pascal里也有指针,基本上C里有的Pascal里都有,Pascal里倒是有好多C没有的特色,比如集合、循环位移等等。
回复

使用道具 举报

发表于 2003-8-12 12:12:24 | 显示全部楼层
hoho~根据高人指点~C++代码确实可以转换成C代码,而且很多编译器也确实是这么做的~
回复

使用道具 举报

 楼主| 发表于 2003-8-12 13:08:35 | 显示全部楼层
libinary 是对的,我一时匆忙写错了,不好意思。

刚才写了一大堆,不幸丢失了,懒得再敲。简单一点说:
(1)我谈的是“代码”,不是“软件”
(2)谈到编程思想更不能拘泥于语言,如果你想,用C同样可以写出面向对象的软件。
回复

使用道具 举报

发表于 2003-8-12 13:17:33 | 显示全部楼层
我也是想探讨探讨代码的移植的 可惜没人回应
其实这种代码的移植还是很有意义的 别人的功能怎么拿过来用 怎么改变使得改动最小
回复

使用道具 举报

 楼主| 发表于 2003-8-12 13:42:39 | 显示全部楼层
大错特错。你所谈论的是“软件”而不是“代码”,这两者的区别不可不知。软件本身是一个工程的概念,软件工程的目的,并不单纯是获得最后的可执行程序,还包括可维护性和可扩展性等特点,而代码本身则要单纯得多。
不同的语言并不能造成编程思想的不同,如果你这样认为,只能说明你并没有领会到“OOP”的本质和精髓。用C同样可以实现“面向对象的编程”,唯一的区别在于,约束条件是由编译器来给我们界定,还是需要人工来界定。没有什么“面向对象的软件”,面向对象只是一种“编程思想”,而不是“软件思想”。
回复

使用道具 举报

 楼主| 发表于 2003-8-12 21:39:39 | 显示全部楼层
如果“编写面向对象的程序”都不是“面向对象的编程”,确实也没有什么可说的了。不过我的意思是用C语言同样可以使用面向对象的思想编程。
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-11-15 05:46 , Processed in 0.049988 second(s), 12 queries .

© 2021 Powered by Discuz! X3.5.

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