面试问了一道题,要将c++程序转换成c程序,都需要考虑什么

paidfighting 2008-06-02 05:41:15
请各位大牛和同学们踊跃发言
...全文
715 64 打赏 收藏 转发到动态 举报
写回复
用AI写文章
64 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhaori 2008-06-04
  • 打赏
  • 举报
回复
[Quote=引用 50 楼 mathe 的回复:]
比如open64编译器,支持C++语法(其实就是使用了gcc的C++前端),
同时它又支持将C语言代码作为输出(使用其中whirl2c功能),
通过这种方法编译,就可以将C++代码转化为C代码。
但是产生代码中还会调用C++运行库,可以:
i)在编译时通过命令行选项禁止C++异常产生(当然如果C++源代码中显示抛出异常可能处理不了)
ii)通过修改编译器whilr2c代码(open64所有源代码公开),将对new,delete等调用转化为malloc/free等对应的c函数
[/Quote]
right
Kratos 2008-06-04
  • 打赏
  • 举报
回复
考虑代码能用的量,最后程序文档是要求干什么的,用最少的成本完成。其余的都是语言特性,慢慢改就可以了。
iambic 2008-06-04
  • 打赏
  • 举报
回复
需要考虑这个需求的合理性。
elegant87 2008-06-04
  • 打赏
  • 举报
回复
[Quote=引用 33 楼 Vitin 的回复:]
所以这样的编译器是不完全的,即不是完全以C语言为目标代码的。

完全的从C++到C的编译器应提供运行时支持:如果要在某个以C语言为机器语言的计算机或者C语言虚拟机上运行,只要包含在这种机器上的C++运行库就可以了。当然实际上很少会在C语言机器或C语言虚拟机上运行,那么就需要C++标准库的C源代码,而非一个运行库。

这个编译器的特征如下:
1、输入是C++源代码,这些源代码可以调用C++标准库。
2、输出是C代码,这些C…
[/Quote]
帅得不敢出门 2008-06-04
  • 打赏
  • 举报
回复
向后转换 这个是不是有点问题
lbaby 2008-06-04
  • 打赏
  • 举报
回复
啥都不用干,把c++编译器改名成c编译器,编译完毕,测试,然后告诉BOSS:OK了
wannasunny 2008-06-04
  • 打赏
  • 举报
回复
其实这也就只能作为面试题了!手术可以让男人变人妖的--但,也许很痛。
maplewasp 2008-06-04
  • 打赏
  • 举报
回复
[Quote=引用 63 楼 ClydeZhang 的回复:]
这个改动要考虑的问题与把考官进行变性手术一样多
[/Quote]
顶......
ClydeZhang 2008-06-04
  • 打赏
  • 举报
回复
这个改动要考虑的问题与把考官进行变性手术一样多
daiming13 2008-06-04
  • 打赏
  • 举报
回复
像这个问题,一般就是想让你阐述C++和C的区别
icansaymyabc 2008-06-04
  • 打赏
  • 举报
回复
需要考虑是否应该更换考官了。
态度决定品质 2008-06-04
  • 打赏
  • 举报
回复
貌似问的是两个语言的区别。
Walker-cheng 2008-06-04
  • 打赏
  • 举报
回复
[Quote=引用 32 楼 wanfustudio 的回复:]
那直接就崩溃

估计没啥法子了,想用c去自己实现c++的高级特性吗? 有点难度,而且难度不小
[/Quote]
Vitin 2008-06-03
  • 打赏
  • 举报
回复
[Quote=引用 41 楼 taodm 的回复:]
貌似能把C++翻到纯C的年代早已结束了。

最重要的,任何这样的自动工具都会导致代码完全丧失可维护性。
[/Quote]
是的,这个时代结束了。因为C++已经成熟了。人们已经愿意在各个平台上为C++写专门的编译器,以达到最佳性能,而非重用C编译器。换句话说,“将C++转换为C程序”的需求已经大大弱化了。

不过,如果仍然以此为需求,那么最好的方法仍然是写这样一个编译器。即写一个C++编译器要考虑什么,完成这个需求就要考虑什么(当然除了C子集部分)。因为C++已经是另外一门语言,而非C语言的扩展了。
Mougou 2008-06-03
  • 打赏
  • 举报
回复
首先需要考虑的是有没有必要这么做!!!
weichen2005 2008-06-03
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 akirya 的回复:]
告诉他,如果写C++代码人水平不高的话,倒是可以慢慢改

要是水平高用stl很多,那么重写是最明智的选择。
[/Quote]

有道理。。。 。。。
taodm 2008-06-03
  • 打赏
  • 举报
回复
[Quote=引用 35 楼 Vitin 的回复:]
引用 29 楼 taodm 的回复:
楼上2位谁给个C++ to C的编译器链接我试试?

呵呵,我倒是没有接触过这样的编译器。
如果自己写的话,工作量与写一般的C++编译器相差不大,仅在C子集方面会简单一些。
所以,还是在网上找找吧。

早期的C++编译器就是以C语言为目标代码的,然后再连一个C编译器。著名的如CFront就是这样的。
[/Quote]
貌似能把C++翻到纯C的年代早已结束了。

最重要的,任何这样的自动工具都会导致代码完全丧失可维护性。
jieao111 2008-06-03
  • 打赏
  • 举报
回复
跑题了?
Joyfulmath 2008-06-03
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 Vitin 的回复:]
楼上说得不错。标准库是编译器的一部分,必须实现。
可以自己写一套C++标准库的源代码(也用C++写),这套源代码的要求是它只能调用C标准库(因为目标语言是C)。
然后在“从C++到C的编译器”上编译通过,这样就可以得到C++标准库的C代码。
此后,当用户代码调用C++标准库时,链接上对应的C代码就可以了。
[/Quote]

都是牛人!
mathe 2008-06-03
  • 打赏
  • 举报
回复
比如open64编译器,支持C++语法(其实就是使用了gcc的C++前端),
同时它又支持将C语言代码作为输出(使用其中whirl2c功能),
通过这种方法编译,就可以将C++代码转化为C代码。
但是产生代码中还会调用C++运行库,可以:
i)在编译时通过命令行选项禁止C++异常产生(当然如果C++源代码中显示抛出异常可能处理不了)
ii)通过修改编译器whilr2c代码(open64所有源代码公开),将对new,delete等调用转化为malloc/free等对应的c函数
加载更多回复(44)

64,643

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧