免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 8311 | 回复: 21
打印 上一主题 下一主题

[C] c和c++区别 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-09-17 10:28 |只看该作者 |倒序浏览
各位大侠,最近困惑于这个问题,c和c++到底有什么区别?

论坛徽章:
0
2 [报告]
发表于 2013-09-17 11:05 |只看该作者
当成两种不同语言吧!就是语法蛮像的!{:2_168:}

论坛徽章:
89
水瓶座
日期:2014-04-01 08:53:31天蝎座
日期:2014-04-01 08:53:53天秤座
日期:2014-04-01 08:54:02射手座
日期:2014-04-01 08:54:15子鼠
日期:2014-04-01 08:55:35辰龙
日期:2014-04-01 08:56:36未羊
日期:2014-04-01 08:56:27戌狗
日期:2014-04-01 08:56:13亥猪
日期:2014-04-01 08:56:02亥猪
日期:2014-04-08 08:38:58程序设计版块每日发帖之星
日期:2016-01-05 06:20:00程序设计版块每日发帖之星
日期:2016-01-07 06:20:00
3 [报告]
发表于 2013-09-17 11:51 |只看该作者
sygspjlsj 发表于 2013-09-17 10:28
各位大侠,最近困惑于这个问题,c和c++到底有什么区别?


这种问题最好自己看看书。

论坛徽章:
44
15-16赛季CBA联赛之浙江
日期:2021-10-11 02:03:59程序设计版块每日发帖之星
日期:2016-07-02 06:20:0015-16赛季CBA联赛之新疆
日期:2016-04-25 10:55:452016科比退役纪念章
日期:2016-04-23 00:51:2315-16赛季CBA联赛之山东
日期:2016-04-17 12:00:2815-16赛季CBA联赛之福建
日期:2016-04-12 15:21:2915-16赛季CBA联赛之辽宁
日期:2016-03-24 21:38:2715-16赛季CBA联赛之福建
日期:2016-03-18 12:13:4015-16赛季CBA联赛之佛山
日期:2016-02-05 00:55:2015-16赛季CBA联赛之佛山
日期:2016-02-04 21:11:3615-16赛季CBA联赛之天津
日期:2016-11-02 00:33:1215-16赛季CBA联赛之浙江
日期:2017-01-13 01:31:49
4 [报告]
发表于 2013-09-17 19:44 |只看该作者
回复 1# sygspjlsj

其实应该反过来问,C和C++到底有什么相同之处。

论坛徽章:
0
5 [报告]
发表于 2013-09-18 11:08 |只看该作者
回复 3# fender0107401
嗯,书是看了,想了解点各位的使用经验以及底层实现。。。。。


   

论坛徽章:
89
水瓶座
日期:2014-04-01 08:53:31天蝎座
日期:2014-04-01 08:53:53天秤座
日期:2014-04-01 08:54:02射手座
日期:2014-04-01 08:54:15子鼠
日期:2014-04-01 08:55:35辰龙
日期:2014-04-01 08:56:36未羊
日期:2014-04-01 08:56:27戌狗
日期:2014-04-01 08:56:13亥猪
日期:2014-04-01 08:56:02亥猪
日期:2014-04-08 08:38:58程序设计版块每日发帖之星
日期:2016-01-05 06:20:00程序设计版块每日发帖之星
日期:2016-01-07 06:20:00
6 [报告]
发表于 2013-09-18 11:09 |只看该作者
sygspjlsj 发表于 2013-09-18 11:08
回复 3# fender0107401
嗯,书是看了,想了解点各位的使用经验以及底层实现。。。。。


。。。

论坛徽章:
0
7 [报告]
发表于 2013-09-18 11:09 |只看该作者
回复 4# windoze
反问的好,有什么相同呢

   

论坛徽章:
0
8
发表于 2013-09-18 11:11
回复 6# fender0107401

分享一下吧,拭目以待,其实我更习惯于c,我觉得c++能干的,c都能干,c不比c++缺什么
   

论坛徽章:
0
9 [报告]
发表于 2013-09-18 11:46 |只看该作者
本帖最后由 幻の上帝 于 2013-09-18 11:59 编辑

回复 7# sygspjlsj


先总结用起来坑爹之处吧。
再考虑和其它不同语言比较。

当然,全面总结应该挺麻烦的。

以下总体相似性按普遍性排列:
1.标准化方式和兼容性。
2.语言规定的phase of translation非常接近,因此实现往往具有相同的结构(常见的一般是预处理器+编译器+编译器驱动程序+汇编器+链接器+某些优化程序;也不排除解释实现)。
3.实现的ABI在体系结构的层次上往往是通用的。因此实现除了前端以外可以直接共享。

对于语言规则来说,主要是指其中有很多雷同的公共部分,也有很多细节的不同。
0.一些重要概念的约定。C和C++共享很多基本相同的基本概念,如字节(byte) 、对象(object) 、未定义行为(undefined behavior) 和诊断消息(diagnostic message) 。但C没有严格的实体(entity) 、 变量(variable) 和动态类型(dynamic type) 的概念,尽管其实有用到。implementation-defined behavior略有差异。反过来C++也有少数类似的含糊,如值(value) 和未决定值(indeterminate value) 。
1.语法。虽然C艹多加了坑爹的上下文相关文法,但是基础部分同样坑爹。典型如就是声明符。早期实现接受的文法实际上完全兼容,当然现在的形式语法有点区别。
2.语义。公共部分和坑爹细节差异同样不少。
伪·类型系统:左值性。C++11另外加的不算,基本上就是换汤不换药。细节上的差别比较显著。(嘛,函数类型……)
类型系统。除了C++的引用,基本同上。连实现基本上都是通用的。同样也有坑爹的差异,比如C的类型系统有compatible type,C++就废除,彻底nominal typing了。C++明确允许空类;但C在语法上就禁止空结构体(C11从WG14/N1570上看因为允许_Static_assert所以其实没有禁止,不过大概会是defect),语义上同样也没打算支持。
转换。内建的标准转换/隐式转换比较类似。C++的C风格转换略严格,因此可以有malloc不(XXX*)就过不了之类的破事(虽然干脆不用C风格转换跟malloc什么的就好了)。
内建表达式。大部分相同,但像?:什么的有些不一样。
C++的初值符支持运行时的副作用,C不支持。
剩下的琐碎细节(像空指针值之类)不多说了。
3.关于实体定义的规则。C有tentative definition,C++没有。C++有ODR,C没有。有些声明在C第一次出现被称为定义,C++则明确规定不是。
4.环境约定。最显然的,C和C++都约定实现必须支持的两种main。C++的入口限制更加严格,规定必须存在返回int的::main;C不要求独立实现存在main,并允许实现定义不返回int的main。

注意这些差异并不见得导致代码无法直接移植。这部分差异相对比较少,具体参见ISO C++ Annex C。

标准库公共部分的差异在ISO C++里有明确提过,都是一堆杂碎,也懒得说了……


论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
10 [报告]
发表于 2013-09-18 23:06 |只看该作者
C语言是面向过程式的开发思路, C++也支持面向过程, 但基本以面向对象思想为主导, 支持模板, 元编程以及一丁点函数式编程的元素.

两门语言都可以直接与操作系统API打交道, 写底层程序是比较顺畅的, 相比其他更高抽象层次(go,erlang比较典型)的语言更单纯一点.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP