C/C++版本迭代笔记

C语言的发展

历史

开端

1970到80年代,C语言被广泛应用,从大型主机到小型微机,也衍生了C语言的很多不同版本.

统一

为统一C语言版本,1983年美国国家标准局(American National Standards Institute,简称ANSI)成立了一个委员会,来制定C语言标准.

1989年C语言标准被批准,被称为ANSI X3.159-1989 "Programming Language C".这个版本的C语言标准通常被称为ANSI C.又由于这个版本是 89 年完成制定的,因此也被称为C89.

1990年,被 ISO 采纳为国际标准,称为 ISO C.又因为这个版本是1990年发布的,因此也被称为C90.

ANSI C(C89) 与 ISO C(C90)内容基本相同,所以,ANSI CISO CC89C90,这些标准的内容都是相同的.

发展

1995年C程序设计语言工作组对C语言进行了一些修改,并成为后来的1999年发布的 ISO/IEC 9899:1999标准,通常被成为C99

2011年12月8日,国际标准化组织(ISO)和国际电工委员会(IEC) 旗下的C语言标准委员会(ISO/IEC JTC1/SC22/WG14)正式发布了C11标准

变化

C99相对于C89的变化

支持了可变参数的宏(Variadic Macro)

支持 // 行注释(这个特性实际上在C89的很多编译器上已经被支持了)

增加了新关键字 restrict,inline,_Complex,_Imaginary,_Bool

支持 long long,long double _Complex,float _Complex 这样的类型

支持 <: :> <% %> %: %:%: ,等等奇怪的符号替代,D&E 里提过这个

支持了不定长的数组.数组的长度就可以用变量了.声明类型的时候呢,就用 int a[*]

变量声明不必放在语句块的开头,for 语句提倡这么写 for(int i=0;i<100;++i) 就是说,int i 的声明放在里面,i 只在 for 里面有效.

复合字面量:当一个类似结构的东西需要临时构造的时候,可以用 (type_name){xx,xx,xx} 这有点像 C++ 的构造函数

相较于C89标准,C99标准新增了一种结构体/数组的初始化方式,名叫designated initializers[8],即:struct { int a[3], b; } w[] ={ [0].a = {1}, [1].a[0] = 2 };[9]

字符串里面,\u 支持 unicode 的字符

支持 16 进制的浮点数的描述

所以 printf和scanf 的格式化串增加了支持 "%lld"和"%llu",对应long long int类型和unsigned long long int类型(可以分别简写为long long和unsigned long long).

增加了一个内置的局部静态字符数组变量func,可以用于得到当前函数的函数名[10] .

对于非常量的表达式,也允许编译器做化简

修改了 /% 处理负数时的定义,这样可以给出明确的结果,例如在C89中-22 / 7 = -3, -22% 7 = -1,也可 以-22 / 7= -4, -22% 7 = 6. 而C99中明确为 -22 / 7 = -3, -22% 7 = -1,只有一种结果.

取消了不写函数返回类型默认就是 int 的规定

允许 struct 定义的最后一个数组写做 [] 不指定其长度描述

const const int i; 将被当作 const int i; 处理

输入输出对宽字符还有长整数等做了相应的支持

C99标准中引进了long long int(-263至263 - 1)和unsigned long long int(0到264 - 1).long long int能够支持的整数长度为64位.

C11相对于C99的变化

对齐处理操作符 alignof,函数 aligned_alloc(),以及 头文件 .

_Noreturn 函数标记.

_Generic 关键词,有点儿类似于 gcc 的 typeof.

静态断言( static assertions),_Static_assert(),在解释 #if 和 #error 之后被处理.

删除了 gets() 函数,C99中已经将此函数被标记为过时,推荐新的替代函数 gets_s().

新的 fopen() 模式,(“…x”).类似 POSIX 中的 O_CREAT|O_EXCL,在文件锁中比较常用.

匿名结构体/联合体.

多线程支持.

_Atomic类型修饰符和 头文件 .

带边界检查(Bounds-checking)的函数接口,定义了新的安全的函数,例如 fopen_s(),strcat_s() 等等.

改进的 Unicode 支持,新的头文件 等.

新增 quick_exit() 函数,作为第三种终止程序的方式,当 exit() 失败时可以做最少的清理工作(deinitializition).

创建复数的宏, CMPLX().

更多浮点数处理的宏 .

struct timespec 成为 time.h 的一部分,以及宏 TIME_UTC,函数 timespec_get().

编译器支持

vc++ 只支持C89,不支持C99和C11的.

C++语言的发展

历史

开端

1983年,贝尔实验室的Bjarne Stroustrup在C语言基础上推出了C++。

C++这个名字是Rick Mascitti于1983年中所建议的,并于1983年12月首次使用。

起步

1985年公布的C++语言1.0版的内容中又添加了一些重要特征:虚函数的概念、函数和运算符的重载、引用、常量(constant)等。

1989年推出的2.0版形成了更加完善的支持面向对象程序设计的C++语言,新增加的内容包括:类的保护成员、多重继承、对象的初始化与赋值的递归机制、抽象类、静态成员函数、const成员函数等。

1993年的C++语言3.0版本是C++语言的进一步完善,其中最重要的新特征是模板(template),此外解决了多重继承产生的二义性问题和相应的构造函数与析构函数的处理等。

发展

1998年C++标准(ISO/IEC14882 Standard for the C++ Programming Language)得到了国际标准化组织(ISO)和美国标准化协会(ANSI)的批准,标准C++语言及其标准库更体现了C++语言设计的初衷。

名字空间的概念、标准模板库(STL)中增加的标准容器类、通用算法类和字符串类型等使得C++语言更为实用。此后C++是具有国际标准的编程语言,该标准通常简称ANSI C++或ISO C++ 98标准,以后每5年视实际需要更新一次标准。

2003年通过了C++标准第二版(ISO/IEC 14882:2003):这个新版本是一次技术性修订,对第一版进行了整理——修订错误、减少多义性等,但没有改变语言特性。这个版本常被称为C++03

2011年8月10日的国际投票确定C++ 0X为正式国际标准,被命名为C++ 11结束,并且所有国家都投出了赞成票。先前被临时命名为C++0x的新标准正式定名为ISO/IEC 14882:2011,简称ISO C++ 11标准。C++ 11标准将取代现行的C++标准C++98和C++03。

变化

c++11的新特征

右值引用,move语义

auto类型推导

以范围为基础的for循环

Lambda函数与表示式

显示虚函数重载override final关键字

空指针

标准库变更:线程支持/多元组/正则表达式/智能指针/包装引用

参考文献:

百度百科 - C++

百度百科 - C语言

C++11新特性学习笔记

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容