为什么游戏引擎大多选择使用 C++ 而不是 C 开发?
来源:互联网 发布:广电网络一年多少钱 编辑:程序博客网 时间:2024/06/14 14:25
作者:crazybie
链接:https://www.zhihu.com/question/26591038/answer/89407866
来源:知乎
著作权归作者所有,转载请联系作者获得授权。在育碧干这么些年,我也来顺便说一下。先说说几个案例吧
1 id soft是业界知名的游戏先驱,在前几代游戏开发上几乎全部都是纯C(doom系列等等),卡尔马克是3D图形界响当当的明星。最近几代也开始转C++。他的回答是,C++是很容易写出丑陋的代码,但是C++用的好的话能写出更漂亮的代码。
2 开源软件的基石GCC编译器从3.2左右开始转C++实现。转之前的状态已经是用尽各种技巧,代码非常复杂,普通开发人员难以方便的贡献代码,整体进度很缓慢的程度。他们选择C++的理由是,C++能让代码更干净,可读性和维护性更好。Clang编译器一开始就是用C++开发。
3 linus骂C++大家都知道吧。其实人家骂是因为当时C++编译器很不成熟生成的代码不适合跑操作系统。人家后来是站出来澄清过。前段时间做git客户端他还是选了C++和qt。
这几个例子其实说明一点:
代码可维护性上,好的C++代码是远远大于好的C代码的,C++代码可以更干净。
因为C语言真的很优秀,跨平台,速度快,工业化就这几点这从它开始诞生到现在就没有对手,唯一比较弱的就是语言表达能力不是很强,而这一点其实跟其他几点是有些互斥的。C++正是为弥补这一点诞生的,目前也只有C++做到了相对C几乎无损耗的高抽象能力,而且还能保持C的所有特点(当然同时也引入了很多问题), 而这也注定成为C++语言复杂的原因。
简单的说,只要适合C但是又需要更好的维护性的时候,C++就很适合。
为什么以前都是C做游戏:
1 其实以前C编译器也不行的,都用汇编
2 规模小重用需求不高
3 速度快,简单,好普及
现在为什么还用C做游戏的部分组件:
1 因为规模不大
2 C有统一的二进制接口(ABI)
3 对于简单的任务C更简单直白
现在为什么很多时候也避免用C++
1 太复杂容易用错
2 代码组织不好的话,编译慢迭代慢
3 不够动态
4 底层特性太多,不够安全
为什么育碧之类的大公司依然坚定的用C++
1 工业化好:上中下游都直接首先支持C++,民间普及度也高
2 可以手动控制各种细节,优化的空间非常大。同样的游戏,肯定优先选更流畅逼真的,人永远是视觉动物。
3 可以更好的团队开发
所以相对这几点他的缺点其实也不算啥了。说到底其实只是一种交换而已。
查看原文:http://www.zoues.com/2016/10/20/%e4%b8%ba%e4%bb%80%e4%b9%88%e6%b8%b8%e6%88%8f%e5%bc%95%e6%93%8e%e5%a4%a7%e5%a4%9a%e9%80%89%e6%8b%a9%e4%bd%bf%e7%94%a8-c-%e8%80%8c%e4%b8%8d%e6%98%af-c-%e5%bc%80%e5%8f%91%ef%bc%9f/
- 为什么游戏引擎大多选择使用 C++ 而不是 C 开发?
- 为什么API多用C而不是C++,为什么C++程序大多不使用异常
- 为什么Android开发使用Java而不是C++?
- 为什么应该选择Java而不是C#?
- 选择开发游戏引擎
- 为什么JDK源码中,无限循环大多使用for(;;)而不是while(true)?
- 嵌入式开发中为什么选择C语言?
- 嵌入式开发为什么选择C语言?
- 嵌入式开发为什么选择C语言
- 嵌入式开发为什么选择C语言?
- 嵌入式为什么选择c语言做开发
- 为什么服务器大多使用Linux?
- 为什么服务器大多使用Linux
- 为什么服务器大多使用Linux?
- C++为什么是C++而不是++C
- 嵌入式开发为什么选择C语言及C的缺陷
- C语言特点&嵌入式开发为什么选择C语言
- 为什么选择C语言
- linux后台开发常用调试工具
- 网络后台开发面试题
- 2016最热门的编程语言与薪资
- SSDT的例子1-inlineHook的jmp验证
- 2016年收入最高的5个编程语言
- 为什么游戏引擎大多选择使用 C++ 而不是 C 开发?
- linux常用的内核参数的设置
- Java—IO流详解(一)
- go开源cache2go项目蛤蟆笔记——简单使用-
- WE WANT U ┃中天微 国防科技大学2017届硕士专场校园宣讲会
- 基于ARM的智能灯光控制系统(8)设备添加
- 极客们都在关注:将会改变未来IT世界的十种编程语言!
- OpenCV 1.x & 2.x 编程简介(矩阵/图像/视频的基本读写操作)
- 热招职位-技术篇