国际标准组织ISO/IEC发布了C++11编程语言标准,售价352瑞士法郎。C++作者Bjarne
Stroustrup在自己网站上提供了标准草案文本(PDF),应该与最后的标准内容相差不大。C++0x/11标准在今年8月获得一致通过,它是1998年以来C++语言的第一次大修订,对C++语言进行了改进和扩充,新的特性也扩展了语言在灵活性和效率上的传统长处,例如转移语义,lambda函数,等等。

不同版本标准差异总结(图片来源:

1. 标准C语言

C语言诞生于20世纪70年代,年龄比我们自己还要大,期间产生了很多标准,但是各种编译器对标准的支持不尽相同。

ANSI
C是使用的最广泛的一个标准,也是第一个正式标准,被称为“标准C语言”。ANSI
C于1980年由美国国家标准局(American National Standards
Institute,简称ANSI)对外发布,各种编译器几乎都完整支持ANSI
C,市面上的书籍、大学里的教材、网上的教程大都以ANSI
C为基础进行讲解,C语言中文网也不例外,也以ANSI C为基础。

在程序中使用的变量名、函数名、标号等统称为标识符。除库函数的函数名由系统定义外,其余都由用户自定义。

科普一下:

C语言于1972年11月问世,1978年美国电话电报公司(AT&T)贝尔实验室正式发布C语言,1983年由美国国家标准局
(American National Standards
Institute,简称ANSI)开始制定C语言标准,于1989年12月完成,并在1990年春天发布,称之为ANSI
C,有时也被称为 C89 或 C90。

澳门葡萄京官方网站 1
C语言之父——里奇

在学习C语言之前,我们先了解一下C语言的历史。

C语言是一门通用的,模块化,程序化的编程语言,被广泛应用于操作系统和应用软件的开发。由于其高效和可移植性,适应于不同硬件和软件平台,深受开发员的青睐。

(文/solidot)    

澳门葡萄京官方网站 2

C语言早期发展

1969-1973年在美国电话电报公司(AT&T)贝尔实验室开始了C语言的最初研发。根据C语言的发明者丹尼斯·里奇
(Dennis Ritchie) 说,C 语言最重要的研发时期是在1972年。

说明:丹尼斯·里奇(Dennis
Ritchie),C语言之父,UNIX之父。1978年与布莱恩·科尔尼干(Brian
Kernighan)一起出版了名著《C程序设计语言(The C Programming
Language)》,现在此书已翻译成多种语言,成为C语言方面最权威的教材之一。2011年10月12日(北京时间为10月13日),丹尼斯·里奇去
世,享年70岁。

C语言之所以命名为C,是因为C语言源自Ken Thompson发明的
B语言,而B语言则源自BCPL语言。

C语言的诞生是和UNIX操作系统的开发密不可分的,原先的UNIX操作系统都是用汇编语言写的,1973年UNIX操作系统的核心用C语言改写,从此以后,C语言成为编写操作系统的主要语言。

以下为转载:

K&R C

1978年,丹尼斯·里奇(Dennis Ritchie)和布莱恩·科尔尼干(Brian
Kernighan)出版了一本书,名叫《The C Programming
Language》(中文译名为《C程序设计语言》)。这本书被C语言开发者们称为“K&R”,很多年来被当作C语言的非正式的标准说明。人们称
这个版本的C语言为“K&R C”。

1988年丹尼斯·里奇(Dennis Ritchie)和布莱恩·科尔尼干(Brian
Kernighan)修改此书,出版了《The C Programming
Language》第二版,第二版涵盖了ANSI
C语言标准。第二版从此成为大学计算机教育有关C语言的经典教材,多年后也没再出现过更好的版本。

【K&R C】 1978 年,Dennis Ritchie 和 Brian Kernighan 合作推出了《The
C Programming
Language》的第一版(按照惯例,经典著作一定有简称,该著作简称为
K&R),书末的参考指南 (Reference Manual) 一节给出了当时 C
语言的完整定义,成为那时 C 语言事实上的标准,人们称之为 K&R
C。从这一年以后,C 语言被移植到了各种机型上,并受到了广泛的支持,使 C
语言在当时的软件开发中几乎一统天下。

ANSI C 和 ISO 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。

后来 ANSI 把这个标准提交到 ISO(国际化标准组织),1990年被 ISO
采纳为国际标准,称为 ISO
C。又因为这个版本是1990年发布的,因此也被称为C90。

ANSI C(C89) 与 ISO C(C90)内容基本相同,主要是格式组织不一样。

因为 ANSI 与 ISO 的C标准内容基本相同,所以对于C标准,可以称为ANSI
C,也可以说是ISO C,或者 ANSI / ISO C。

注意:以后大家看到 ANSI C、ISO
C、C89、C90,要知道这些标准的内容都是一样的。

目前,几乎所有的开发工具都支持 ANSI / ISO
C 标准。是C语言用得最广泛的一个标准版本。

【C89 (ANSI C)】 随着 C
语言在多个领域的推广、应用,一些新的特性不断被各种编译器实现并添加进来。于是,建立一个新的“无歧义、于具体平台无关的
C 语言定义” 成为越来越重要的事情。1983 年,ASC X3(ANSI
属下专门负责信息技术标准化的机构,现已改名为
INCITS)成立了一个专门的技术委员会 J11(J11 是委员会编号,全称
X3J11),负责起草关于 C 语言的标准草案。1989 年,草案被 ANSI
正式通过成为美国国家标准,被称为 C89 标准。 

C99

在ANSI
C标准确立之后,C语言的规范在很长一段时间内都没有大的变动。1995年C程序设计语言工作组对
C语言进行了一些修改,成为后来的1999年发布的 ISO/IEC
9899:1999标准,通常被成为C99。

但是各个公司对C99的支持所表现出来的兴趣不同。当GCC和其它一些商业编译器支持C99的大部分特性的時候,微软和Borland却似乎对此不感兴趣。

说明:GCC(GNU Compiler
Collection,GNU编译器集合)是一套由GNU工程开发的支持多种编程语言的编译器。

综上所述,目前广泛使用的C语言版本是 ANSI / ISO
C,最经典的C语言教材是《C程序设计语言(The C Programming Language)
第二版》。

澳门葡萄京官方网站 3
C语言版本更迭史

【C90 (ISO C)】 随后, 《The C Programming
Language》第二版开始出版发行,书中内容根据 ANSI C(C89)进行了更新。1990
年,在 ISO/IEC JTC1/SC22/WG14 (ISO/IEC 联合技术第 I 委员会第 22
分委员会第 14 工作组) 的努力下,ISO 批准了 ANSI C 成为国际标准。于是
ISO C(又称为 C90)
诞生了。除了标准文档在印刷编排上的某些细节不同外,ISO C(C90) 和 ANSI
C(C89) 在技术上完全一样。 

C语言对其它语言的影响

很多编程语言都深受C语言的影响,比如C++(原先是C语言的一个扩展)、C#、Java、PHP、Javascript、Perl、LPC和UNIX的C
Shell等。

也正因为C语言的影响力,掌握C语言的人,再学其它编程语言,大多能很快上手,触类旁通,很多大学将C语言作为计算机教学的入门语言。

 

【C95】 之后,ISO 在 1994、1996 年 分别出版了 C90
的技术勘误文档,更正了一些印刷错误,并在1995 年通过了一份 C90
的技术补充,对 C90 进行了微小的扩充,经过扩充后的 ISO C 被称为 C95。 

2. 标识符

 

C语言规定,标识符只能是字母(A~Z,
a~z)、数字(0~9)和下划线(_)组成的字符串,并且其第一个字符必须是字母或下划线。
以下标识符是合法的: a, x,  x3, BOOK_1, sum5 以下标识符是非法的: 3s   
以数字开头 s*T    出现非法字符* -3x    以减号(-)开头 bowy-1   
出现非法字符减号(-)

在fedora 21
里面不限制标识符的长度,但它不受gcc编译器限制,代码正常执行。

1 #include<stdio.h>  2 int main()  3 {  4     int abcdefgsjdfshfkshfkshfkjshifhweiuthrewuiriweuhriuwehweudefgsjdfshfkshfkshfkjshifhweiuthrewuiriweuhriuwehweudefgsjdfshfkshfkshfkjshifhweiuthrewuiriweuhriuwehweudefgsjdfshfkshfkshfkjshifhweiuthrewuiriweuhriuwehweudefgsjdfshfkshfkshfkjshifhweiuthrewuiriweuhriuwehweudefgsjdfshfkshfkshfkjshifhweiuthrewuiriweuhriuwehweudefgsjdfshfkshfkshfkjshifhweiuthrewuiriweuhriuwehweuihgfdiwehfuiwehfuiwehfiwehfiewhfiuhweihsiuhf=0;  5     printf("hello world");  6     return 0;  7 }

澳门葡萄京官方网站 4

C99 1999 年,ANSI 和 ISO 又通过了最新版本的 C
语言标准和技术勘误文档,该标准被称为 C99 。这基本上是目前关于
C 语言的最新、最权威的定义了。 

3. 关键字

关键字是由C语言规定的具有特定意义的字符串,通常也称为保留字。用户定义的标识符不应与关键字相同。

C语言的关键字分为以下几类:

分类 说明
类型说明符  用于定义、说明变量、函数或其它数据结构的类型。int、double等。
语句定义符 用于表示一个语句的功能。if else就是条件语句的语句定义符。
预处理命令字 用于表示一个预处理命令。include。

    现在,各种 C 编译器都提供了 C89(C90)
的完整支持,对 C99 还只提供了部分支持,还有一部分提供了对某些 K&R C
风格的支持。  

4. 运算符

C语言中含有相当丰富的运算符。运算符与变量,函数一起组成表达式,表示各种运算功能。运算符由一个或多个字符组成,如加号(+)、减号(-)、乘号(*)等。

目前主要的C语言规范有c89(c90),
c95(94)和c99。C89是最早的C语言规范,于89年提出,90年先由美国国家标准局推出ANSI版本,后来被接纳为ISO国际标准 (ISO/IEC
9899:1990),因而有时也称为c90。但在94和96年分别对c90进行了两次错误修正,gcc支持的是修正后的c89(90)版本的C语言规
范。在95年提出过对90版规范的修订案,称为
C95或者AMD1。gcc也支持c95规范。最新的一次C规范修订在99年制定(ISO/IEC
9899:1999),即常称的C99规范。在2001年对C99的错误进行了修正,gcc支持的修正后的c99规范,但是到目前为止,gcc还没有完成对c99规范的完全支持。

5. 分隔符

在C语言中采用的分隔符有逗号(,)和空格两种。逗号主要用在类型说明和函数
参数表中,分隔各个变量。空格多用于语句各单词之间,作间隔符。在关键字,标识符之间必须要有一个以上的空格符作间隔,否则将会出现语法错误,例如把
int a; 写成 inta; C语言编译器会把
inta 当成一个标识符处理,其结果必然出错。

另附:C语言起源

6. 常量

常量是值不能被改变的量。C语言中使用的常量可分为数字常量、字符常量、字符串常量、符号常量、转义字符等多种。在后面章节中将专门给予介绍。

      【起源】 C 语言最早的原型是 ALGOL 60 1963 年,剑桥大学将其发展成为
CPL(Combined Programing Language)。 1967 年,剑桥大学的 Matin Richards
对 CPL 语言进行了简化,产生了 BCPL 语言。 1970 年,美国贝尔实验室(Bell
Labs)的 Ken Thompson 将 BCPL 进行了修改,并取名叫做 B 语言,意思是提取
CPL 的精华(Boiling CPL down to its basic good features)。并用 B
语言写了第一个 UNIX 系统。 1973 年,AT&T 贝尔实验室的 Dennis
Ritchie(D.M.RITCHIE) 在 BCPL 和 B 语言的基础上设计出了一种新的语言,取
BCPL 中的第二个字母为名,这就是大名鼎鼎的 C 语言。随后不久,UNIX
的内核(Kernel) 和应用程序全部用 C 语言改写,从此,C 语言成为 UNIX
环境下使用最广泛的主流编程语言。

7.变量

变量由用户自己命名,用来保存特定类型的数据,数据可以被改变。数据类型有整数、浮点数、字符等,将在后面章节进行介绍。

 

8. 注释

标准C语言的注释是以“/*”开头并以“*/”结尾的串。在“/*”和“*/”之间的即为注释。程序编译时,不对注释作任何处理。注释可出现在程序中的任
何位置。注释用来向用户提示或解释程序的意义。在调试程序中对暂不使用的语句也可用注释符括起来,使翻译跳过不作处理,待调试结束后再去掉注释符。

另外,各种编译器都支持以“//”开头的注释,虽然它不是标准C的规定,但是早已成为事实标准,在程序中广泛使用。“//”仅支持单行注释,也就是说,注释中不能出现换行符;而“/*
 */”支持多行注释,注释中可以出现换行符。


参考文献:

[1] 维基百科ANSI C

[2] C语言的各种版本:C89,AMD1,C99,C11
【推荐阅读】