firemail

标题: c 标准和c++标准 [打印本页]

作者: firemail    时间: 2019-2-14 09:55
标题: c 标准和c++标准
本帖最后由 firemail 于 2019-2-14 10:47 编辑

1.C 的第一个标准是由ANSI发布的。虽然这份文档后来被国际标准化组织(ISO)采纳并且ISO发布的修订版也被ANSI采纳了,但名称ANSI C(而不是 ISO C)仍被广泛使用。一些软件开发者使用ISO C,还有一些使用 Standard C。

2.C89
1983年,美国国家标准协会(ANSI)组成了一个委员会,X3J11,为了创立 C 语言的标准。经过漫长而艰苦的过程,该标准于1989年完成,并在作为ANSI X3.159-1989 "Programming Language C"正式生效。因为这个标准是1989年发布的,所以一般简称C89标准。有些人也把C89标准叫做ANSI C,因为这个标准是美国国家标准协会(ANSI)发布的。

3.C90
在1990年,ANSI C89标准被国际标准化组织(ISO)和国际电工委员会(IEC)采纳为国际标准,名叫ISO/IEC 9899:1990 - Programming languages -- C  ,有些人简称C90标准。因此,C89和C90通常指同一个标准,一般更常用C89这种说法。

4.C99
在2000年3月,国际标准化组织(ISO)和国际电工委员会(IEC)采纳了第二个C语言标准,名叫ISO/IEC 9899:1999 - Programming languages -- C,简称C99标准。

5.C11
在2011年12月,国际标准化组织(ISO)和国际电工委员会(IEC)采纳了第三个C语言标准,名叫ISO/IEC 9899:2011 - Information technology -- Programming languages -- C,简称C11标准。它是C程序语言的最新标准


C++语言发展大概可以分为三个阶段:



作者: firemail    时间: 2019-2-14 10:08
本帖最后由 firemail 于 2019-2-14 10:46 编辑

                C语言的发展阶段
C语言之所以命名为C,是因为 C语言源自Ken Thompson发明的B语言,而 B语言则源自BCPL语言。
C语言继续发展,在1982年,很多有识之士和美国国家标准协会为了使这个语言健康地发展下去,决定成立C标准委员会,建立C语言的标准。委员会由硬件厂商,编译器及其他软件工具生产商,软件设计师,顾问,学术界人士,C语言作者和应用程序员组成。1989年,ANSI发布了第一个完整的C语言标准——ANSI X3.159—1989,简称“C89”,不过人们也习惯称其为“ANSI C”。C89在1990年被国际标准组织ISO(International Organization for Standardization)一字不改地采纳,ISO官方给予的名称为:ISO/IEC 9899,所以ISO/IEC9899: 1990也通常被简称为“C90”。1999年,在做了一些必要的修正和完善后,ISO发布了新的C语言标准,命名为ISO/IEC 9899:1999,简称“C99”。 在2011年12月8日,ISO又正式发布了新的标准,称为ISO/IEC9899: 2011,简称为“C11”。

C语言标准:

K&R C
起初,C语言没有官方标准。1978年由美国电话电报公司(AT&T)贝尔实验室正式发表了C语言。布莱恩·柯林汉(Brian Kernighan) 和 丹尼斯·里奇(Dennis Ritchie) 出版了一本书,名叫《The C Programming Language》。这本书被 C语言开发者们称为K&R,很多年来被当作 C语言的非正式的标准说明。人们称这个版本的 C语言为K&R C。[3]
K&R C主要介绍了以下特色:
即使在后来ANSI C标准被提出的许多年后,K&R C仍然是许多编译器的最标准要求,许多老旧的编译器仍然运行K&R C的标准。

ANSI C / C89标准
1970到80年代,C语言被广泛应用,从大型主机到小型微机,也衍生了C语言的很多不同版本。
1983年,美国国家标准协会(ANSI)成立了一个委员会X3J11,来制定 C语言标准。
1989年,美国国家标准协会(ANSI)通过了C语言标准,被称为ANSI X3.159-1989 "Programming Language C"。因为这个标准是1989年通过的,所以一般简称C89标准。有些人也简称ANSI C,因为这个标准是美国国家标准协会(ANSI)发布的。
1990年,国际标准化组织(ISO)和国际电工委员会(IEC)把C89标准定为C语言的国际标准,命名为ISO/IEC 9899:1990 - Programming languages -- C。因为此标准是在1990年发布的,所以有些人把简称作C90标准。不过大多数人依然称之为C89标准,因为此标准与ANSI C89标准完全等同。
1994年,国际标准化组织(ISO)和国际电工委员会(IEC)发布了C89标准修订版,名叫ISO/IEC 9899:1990/Cor 1:1994 ,有些人简称为C94标准
1995年,国际标准化组织(ISO)和国际电工委员会(IEC)再次发布了C89标准修订版,名叫ISO/IEC 9899:1990/Amd 1:1995 - C Integrity ,有些人简称为C95标准

C99标准
1999年1月,国际标准化组织(ISO)和国际电工委员会(IEC)发布了C语言的新标准,名叫ISO/IEC 9899:1999 - Programming languages -- C,简称C99标准。这是C语言的第二个官方标准
在C99中包括的特性有:
但是各个公司对C99的支持所表现出来的兴趣不同。GCC和其它一些商业编译器支持C99的大部分特性微软和Borland却似乎对此不感兴趣。

C11标准
2011年12月8日,国际标准化组织(ISO)和国际电工委员会(IEC)再次发布了C语言的新标准,名叫ISO/IEC 9899:2011 - Information technology -- Programming languages -- C ,简称C11标准,原名C1X。这是C语言的第三个官方标准,也是C语言的最新标准。
新的标准提高了对C++的兼容性,并增加了一些新的特性。这些新特性包括:
来源: <http://baike.baidu.com/link?url=gNUFCCorwpgZJaNtM00nh6-3T7eI4OKI2fIQ1nKLpJx1A6Nu9Vlrm8uS7s9gQvJzVqRR0jYCO8_QNmU2fA5ic_>



C++语言发展大概可以分为三个阶段:

以下是C++发展年代列表:
来源: <http://baike.baidu.com/view/824.htm?fromtitle=c%2B%2B语言&fromid=4102088&type=syn>

语言的发展是一个逐步递进的过程,C++ 是直接从 C 语言发展过来的,而 C 语言是从 B 语言发展过来的,B 语言是 BCPL 的一个解释性后代,BCPL 是 Basic CPL。其中最有趣的是 CPL 中 C 的由来,由于当时这个语言是剑桥大学和伦敦大学合作开发的,在伦敦的人员加入之前,C 表示剑桥,伦敦人员加入之后,C 表示 Combined 组合。还有一种非正式的说法,C 表示 Christopher,因为 Christopher 是 CPL 背后的主要动力。

最初导致C++诞生的原因是在Bjarne博士等人试图去分析UNIX的内核的时候,这项工作开始于1979年4月,当时由于没有合适的工具能够有效的分析由于内核分布而造成的网络流量,以及怎样将内核模块化。同年10月,Bjarne博士完成了一个可以运行的预处理程序,称之为Cpre,它为C加上了类似Simula的类机制。在这个过程中,Bjarne博士开始思考是不是要开发一种新的语言,当时贝尔实验室对这个想法很感兴趣,就让Bjarne博士等人组成一个开发小组,专门进行研究。

当时不是叫做C++,而是C with class,这是把它当作一种C语言的有效扩充。由于当时C语言在编程界居于老大的地位,要想发展一种新的语言,最强大的竞争对手就是C语言,所以当时有两个问题最受关注:C++要在运行时间、代码紧凑性和数据紧凑性方面能够与C语言相媲美,但是还要尽量避免在语言应用领域的限制。在这种情况下,一个很自然的想法就是让C++从C语言继承过来,但是我们的Bjarne博士更具有先见之明,他为了避免受到C语言的局限性,参考了很多的语言,例如:从Simula继承了类的概念,从Algol68继承了运算符重载、引用以及在任何地方声明变量的能力,从BCPL获得了//注释,从Ada得到了模板、名字空间,从Ada、Clu和ML取来了异常。
来源: <http://c.biancheng.net/cpp/biancheng/view/1.html>

C++语言标准:
不是叫做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日公布。

如何理解C++?《摘自Effective C++》
C++已经是个多重范型编程语言(multiparadigm programming language),一个同事支持过程形式(procedural)、面向对象形式(object-oriented)、函数形式(functional)、范型形式(generic)、元编程形式(metaprogramming)的语言。

如何理解这样一个语言?
将C++视为一个由相关语言组成的联邦而非单一语言,在其某个次语言中,各种守则与通例都倾向简单、直观易懂、并且容易记住。

C++的4个次语言:
C++并不是一个带有一组守则的一体语言,而是由4个次语言组成的联邦语言,每个次语言都有自己的规约。

remember
C++高效编程守则视状况而变化,取决于你使用C++的哪一部分。

来源: <http://blog.csdn.net/livelylittlefish/article/details/5729847>
再也不敢轻易声称自己是个C++程序员了,无知者无畏,果然是呀

C++与C的关系
C语言是C++的基础,C++和C语言在很多方面是兼容的。
C语言是一个结构化语言,它的重点在于算法与数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事物)控制)。C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事物)控制。所以C语言和C++的最大区别在于它们解决问题的思想方法不一样。
C++对C的“增强”,表现在六个方面:
与C不兼容之处
C++一般被认为是C的超集合(Superset),但这并不严谨。大部分的C代码可以很轻易的在C++中正确编译,但仍有少数差异,导致某些有效的C代码在C++中失效,或者在C++中有不同的行为。
若要混用C和C++的代码,则所有在C++中调用的C代码,必须放在 extern "C" { /* C代码 */ } 内。
            

探c++11新标准。官网链接:https://msdn.microsoft.com/zh-cn/library/hh567368.aspx#featurelist




https://en.wikipedia.org/wiki/ANSI_C


https://zh.wikipedia.org/wiki/ANSI_C







欢迎光临 firemail (http://firemail.wang:8088/) Powered by Discuz! X3