附件项 C/C++发展-闫刚


再也不敢轻易声称自己是个C/C++程序员了,无知者无畏,果然是呀.

很少人了解过C/C++的发展史,也可以说很少人关注过ISO发布的C/C++新标准,作为一名合格的程序员,我们应该阶段性的学习新的知识,新的领域,C/C++的标准出来后,会伴随一些编译器同时支持C/C++的新特性出现。

乔布斯说过“持饥饿,保持愚蠢”,可能就是这个意思。

https://launchpad.net/gcc-arm-embedded/


  • C语言的发展阶段

  1989年,ANSI发布了第一个完整的C语言标准——ANSI X3.159—1989,简称“C89”,不过人们也习惯称其为“ANSI C”,1999年,在做了一些必要的修正和完善后,ISO发布了新的C语言标准,命名为ISO/IEC 9899:1999,简称“C99”。 在2011年12月8日,ISO又正式发布了新的标准,称为ISO/IEC9899: 2011,简称为“C11”。

C89

1989年,美国国家标准协会(ANSI)通过了C语言标准,被称为ANSI X3.159-1989 "Programming Language C"。因为这个标准是1989年通过的,所以一般简称C89标准。有些人也简称ANSI C,因为这个标准是美国国家标准协会(ANSI)发布的。


C99标准
1999年1月,国际标准化组织(ISO)和国际电工委员会(IEC)发布了C语言的新标准,名叫ISO/IEC 9899:1999 - Programming languages -- C,简称C99标准。这是C语言的第二个官方标准
在C99中包括的特性有:
  1. 增加了对编译器的限制,比如源程序每行要求至少支持到 4095 字节,变量名函数名的要求支持到 63 字节(extern 要求支持到 31)。
  2. 增强了预处理功能。例如:
  3. 宏支持取可变参数 #define Macro(...) __VA_ARGS__
  4. 使用宏的时候,允许省略参数,被省略的参数会被扩展成空串。
  5. 支持 // 开头的单行注释(这个特性实际上在C89的很多编译器上已经被支持了)
  6. 增加了新关键字 restrict, inline, _Complex, _Imaginary, _Bool
  7. 支持 long long, long double _Complex, float _Complex 等类型
  8. 支持不定长的数组,即数组长度可以在运行时决定,比如利用变量作为数组长度。声明时使用 int a[var] 的形式。不过考虑到效率和实现,不定长数组不能用在全局,或 struct 与 union 里。
  9. 变量声明不必放在语句块的开头,for 语句提倡写成 for(int i=0;i<100;++i) 的形式,即i 只在 for 语句块内部有效。

C11标准
2011年12月8日,国际标准化组织(ISO)和国际电工委员会(IEC)再次发布了C语言的新标准,名叫ISO/IEC 9899:2011 - Information technology -- Programming languages -- C ,简称 C11标准,原名 C1X。这是C语言的第三个官方标准,也是C语言的最新标准。
新的标准提高了对C++的兼容性,并增加了一些新的特性。这些新特性包括:
  1. 对齐处理(Alignment)的标准化(包括_Alignas标志符,alignof运算符, aligned_alloc函数以及<stdalign.h>头文件。
  2. _Noreturn 函数标记,类似于 gcc 的 __attribute__((noreturn))。
  3. _Generic 关键字。
  4. 多线程(Multithreading)支持,包括:
  5. _Thread_local存储类型标识符,<threads.h>头文件,里面包含了线程的创建和管理函数。
  6. _Atomic类型修饰符和<stdatomic.h>头文件。
  • C++发展

C++ 98 标准
C++标准第一版,1998年发布。正式名称为ISO/IEC 14882:1998[18] 。
绝大多数编译器都支持C++98标准。不过当时错误地引入了 export关键字。由于技术上的实现难度,除了Comeau C++编译器export关键字以外,没有任何编译器支持export关键字。并且这个标准对现代的一些编译理念有相当的差距,有很多在高级语言都应当有的功能,它都没有。这也正是后来需要制定C++11标准的原因所在。

C++ 03 标准
C++标准第二版,2003年发布。正式名称为ISO/IEC 14882:2003[19] 。这个标准仅仅是C++98修订版,与 C++98几乎一样,没做什么修改。仅仅是对C++98做了一些“ 勘误”,就连主流编译器(受C99标准影响)都已支持的 long long都没有被加入C++03标准。

C++ 11 标准
C++标准第三版,2011年8月12日发布。正式名称为ISO/IEC 14882:2011[20] 。
由C++标准委员会于2011年8月12日公布,并于2011年9月出版。2012年2月28日的国际标准草案(N3376)是最接近于现行标准的草案(编辑上的修正)。C++11包含了 核心语言的新机能,并且拓展C++标准程序库,并且加入了大部分的C++ Technical Report 1程序库(数学上的特殊函数除外)。此次标准为C++98发布后13年来第一次重大修正。
注意:  C++11标准(ISO/IEC 14882:2011)与 C11标准(ISO/IEC 9899:2011)是两个完全不同的标准,后者是C语言的标准。

C++ 14 标准
C++标准第四版,2014年8月18日发布。正式名称为ISO/IEC 14882:2014[21] 。
2014年8月18日,ISO组织在其网站上发布文章称:
C++ 作者 Bjarne Stroustrup 称,主要的编译器开发商已经实现了 C++ 14 规格。
C++ 14 是 C++ 11 的增量更新,主要是支持普通函数的返回类型推演,泛型 lambda,扩展的 lambda 捕获,对 constexpr 函数限制的修订,constexpr变量模板化等等。
C++14是C++语言的最新标准,正式名称为"International Standard ISO/IEC 14882:2014(E) Programming Language C++"。C++14旨在作为C++11的一个小扩展,主要提供漏洞修复和小的改进。C++14标准的委员会草案(Committee Draft)N3690于2013年5月15日发表。工作草案(Working Draft)N3936已于2014年3月02日完成。最终的投票期结束于2014年8月15日,结果(一致通过)已于8月18日公布。




猜你喜欢

转载自blog.csdn.net/yangang185/article/details/80321077