C - 无需运行环境支持 编译型跨平台高级计算机编程语言
C - 无需运行环境支持 编译型跨平台高级计算机编程语言C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易方式编译、处理低级存储器、产生少量机器码及无需任何运行环境支持便能运行的编程语言。
尽管 C 语言提供了许多低级处理功能,但仍保持着良好的跨平台特性,以 C 语言编写的程序可在许多电脑系统平台上编译,甚至包括嵌入式处理器(单片机或称 MCU)及超级电脑等作业平台。
C 语言之所以命名为 C,是因为 C 语言源自 Ken Thompson 发明的 B 语言,而 B 语言则源自 BCPL 语言。
1967 年剑桥大学的 Martin Richards 对 CPL 语言进行了简化,于是产生了 BCPL(Basic Combined Programming Language)语言。
20 世纪 60 年代美国 AT&T 公司贝尔实验室(AT&T Bell Laboratory)的研究员 Ken Thompson 闲来无事,手痒难耐,想玩一个他自己编写的模拟太阳系航行的电子游戏 —— Space Travel。他背着老板,找到了一台空闲机器 —— PDP-7。但这台机器并没有操作系统,而游戏必须使用操作系统的一些功能,于是他着手为 PDP-7 开发操作系统。后来,这个操作系统被命名为 —— UNIX。
1970年美国贝尔实验室的 Ken Thompson 以 BCPL 语言为基础,设计出简单且很接近硬件的 B 语言(取 BCPL 的首字母)。并用 B 语言写了第一个 UNIX 操作系统。
1971 年同样酷爱 Space Travel 游戏的 Dennis M. Ritchie 为能早点玩上游戏,加入了 Thompson 的开发项目,合作开发 UNIX。他的主要工作是改造 B 语言,使其更成熟。
1972 年美国贝尔实验室的 Dennis M. Ritchie,在 B 语言的基础上设计出了一种新语言,取 BCPL 的第二个字母作为这种语言的名字,这就是 C 语言。
10 倍以上效率提升 智能GUI文档翻译 Python Qt/C++ HTML5 网站站群 "数字 IDE 专业版" 开发工具http://idepro.digitser.cn/http://forum.digitser.cn/thread-2184-1-1.html
百度网盘https://pan.baidu.com/s/1jIzOgzs
软件仓库https://github.com/digitserhttps://digitser.sourceforge.io/https://pan.baidu.com/s/1TV70__Be1ta0ney1-tudFQ
1973 年初 C 语言的主体完成。Ken Thompson 和 Dennis M. Ritchie 迫不及待地用它完全重写了 UNIX。此时,编程的乐趣使他们已完全忘记了那个 "Space Travel" 游戏,一门心思投入到了 UNIX 和 C 语言的开发中。随着 UNIX 的发展,C 语言自身也在不断完善。直到今天,各种版本的 UNIX 内核和周边工具仍使用 C 语言作为最主要的开发语言,其中还有不少继承了 Ken Thompson 和 Dennis M. Ritchie 的代码。
在开发中,Ken Thompson 和 Dennis M. Ritchie 还考虑把 UNIX 移植到其他类型的计算机上使用。C 语言强大的移植性(Portability)在此显现。机器语言和汇编语言都不具有移植性,为 x86 开发的程序,不可能在 Alpha、SPARC 及 ARM 等机器上运行。而 C 语言程序则可用在任意架构的处理器上,只要那种架构的处理器具有对应的 C 语言编译器和库,然后,将 C 源代码编译、连接成目标二进制文件之后即可运行。
1977 年Dennis M. Ritchie 发表了不依赖于具体机器系统的 C 语言编译文本《可移植的 C 语言编译程序》。
1982 年很多有识之士和美国国家标准协会为使这种语言健康地发展下去,决定成立 C 标准委员会,建立 C 语言标准。委员会由硬件厂商、编译器及其他软件工具生产商、软件设计师、IT 顾问、学术界人士、C 语言作者及应用程序员组成。
1989 年 ANSI 发布了第一个完整的 C 语言标准 —— ANSI X3.159 — 1989,简称 “C89”,不过人们也习惯称其为 “ANSI C”。
1990 年 C89 在被国际标准组织 ISO (International Organization for Standardization) 一字不改地采纳,ISO 官方给予的名称为:ISO/IEC 9899,所以 ISO/IEC 9899: 1990 也通常被简称为 “C90”。
1999 年在做了一些必要的修正和完善后,ISO 发布了新的 C 语言标准,命名为ISO/IEC 9899:1999,简称 “C99”。
2011 年 12 月 8 日 ISO 又正式发布了新标准,称为 ISO/IEC 9899: 2011,简称为 “C11”。
C 语言程序基本构成与注意事项:01、一个 C 语言源程序可由一个或多个源文件组成;
02、每个源文件可由一个或多个函数组成;
03、一个源程序不论由多少个文件组成,都有一个且只能有一个为整个程序入口的 main 函数,即主函数;
04、源程序中可以有预处理命令(包括:include,ifdef、ifndef、define),预处理命令通常应放在源文件或源程序的最前面;
05、每一个说明,每一个语句都必须以分号结尾;但预处理命令、函数头及花括号 “}” 之后不能加分号。结构体、联合体、枚举型声明的 “}” 后要加“ ;”;
06、标识符、关键字之间必须至少加一个空格以示间隔;若已有明显间隔符的,也可不再加空格间隔。
C 语言书写规则:
01、一个说明或一条语句占一行;
02、用 {} 括起来的部分,通常表示程序的某一层次结构;{} 一般与该结构语句的第一个字母对齐,并单独占一行;
03、低一层次的语句或说明可比高一层次的语句或说明,缩进若干格后书写;以便看起来更清晰,增加程序的可读性。
在编程时应力求遵循这些规则,以养成良好的编程风格。
以下是会在标准输出 (stdout) ,打印 "Hello, world!" 字符串的简单 C 语言程序代码:
# include <stdio.h>
int main(void)
{
printf("Hello, Word!\n");
return 0;
}
基本特性
01、高级语言
C 语言把高级语言的基本结构和语句,与低级语言的实用性结合了起来。
02、结构化
结构式语言的显著特点是:代码及数据的分离,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰,便于使用、维护以及调试。C 语言是以函数形式提供给用户的,这些函数可方便调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。
03、跨平台
由于标准的存在,使得几乎同样的C 代码可用于多种操作系统,如 Windows、DOS、UNIX 等等;也适用于多种机型。C 语言对编写需要操控硬件的场合,优于其它高级语言。
04、指针
可直接进行靠近硬件的操作,但 C 指针操作不做保护,也给它带来了很多的不安全影响。
C++在这方面做了改进,在保留指针操作的同时又增强了安全性,受到了一些用户的支持,但由于这些改进增加了语言的复杂度,也为另一部分用户所诟病。
Java 则吸取了 C++ 的教训,取消了指针操作,也取消了 C++ 改进中一些备受争议的地方,在安全性和适用性方面均取得良好的效果,但其本身解释在虚拟机中运行,运行效率低于 C/C++。
一般而言,C、C++、java 被视为同一系语言,它们长期占据着程序使用榜的前三名。
此外,C 语言还是一种具有变量作用域(variable scope)及递归功能的过程语言;不同的变量类型可以用结构体(struct)组合在一起。C 语言只有 32 个保留字(reserved keywords),使变量、函数命名有更多弹性。部分变量类型可以转换,譬如:整型和字符型变量。
C 语言传递参数均是以值传递(pass by value),也可采用指针(a pointer passed by value)传递。通过指针(pointer),C 语言可轻松对存储器进行低级控制。
C语言的预编译处理(preprocessor),可让编译更具有弹性。
优点
01、简洁紧凑、灵活方便
C 语言一共只有32 个关键字,9 种控制语句,程序书写形式自由,区分大小写。
C 语言把高级语言的基本结构和语句,与低级语言的实用性结合了起来。
C 语言可像汇编语言一样对位、字节及地址进行操作,而这三者是计算机最基本的工作单元。
02、运算符丰富C语言运算符范围广泛,共有 34 种运算符。
C 语言把括号、赋值、强制类型转换等都作为运算符处理。从而使 C 语言的运算类型极其丰富,表达式类型多样化。灵活使用各种运算符,可实现在其它高级语言中难以实现的运算。
03、数据类型丰富C 语言数据类型,有:整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等。可用来实现各种复杂数据结构的运算。C 语言引入了指针概念,使程序效率更高。
04、表达方式灵活实用C 语言提供了多种运算符和表达式值方法,对问题的表达可通过多种途径获得,程序设计主动、灵活。C 语言语法限制不太严格,程序设计自由度大,如对整型量与字符型数据及逻辑型数据,可以通用等。
05、允许直接访问物理地址,对硬件进行操作
由于 C 语言允许直接访问物理地址,可以直接对硬件进行操作;因此,它既具有高级语言的功能,又具有低级语言的许多特性。可像汇编语言一样对位(bit)、字节及地址进行操作,而这三者是计算机最基本的工作单元,可用来写系统软件。
06、生成目标代码质量高,程序执行效率高C语言描述问题比汇编语言迅速,工作量小、可读性好,易于调试、修改和移植,而代码质量与汇编语言相当。C 语言一般仅比汇编程序生成的目标代码效率低 10%~20%。
07、可移植性好C语言在不同机器上的编译程序,86% 的代码是公共的;所以,C 语言编译程序便于移植。在一个环境上用 C 语言编写的程序,不改动或稍加改动,就可移植到另一个完全不同的环境下运行。
08、表达力强C语言有丰富的数据结构和运算符。包含各种数据结构,譬如:整型、数组类型、指针类型和联合类型等,可用来实现各种数据结构的运算。C 语言的运算符有 34 种,范围很宽,灵活使用各种运算符可实现难度极大的运算。C 语言能直接访问硬件的物理地址,能进行位(bit)操作。兼有高级语言和低级语言的许多优点。
C语言既可用来编写系统软件,又可开发应用软件,已成为一种通用程序设计语言。
此外,C 语言具有强大的图形功能,支持多种显示器和驱动器。且计算功能、逻辑判断功能强大。
缺点
01、C 语言的在数据的封装性上,这一点使得 C 语言在数据的安全性上有很大缺陷,这也是 C 和 C++ 的一大区别。
02、C 语言的语法限制不太严格,对变量的类型约束也不严格,影响程序的安全性,对数组下标越界不作检查等。从应用的角度,C 语言比其他高级语言较难掌握。也就是说,对用 C 语言的人而言,要求对程序设计更熟练一些。
基本构成
01、数据类型
C 语言的数据类型,包括:整型、字符型、实型或浮点型(单精度和双精度)、枚举类型、数组类型、结构体类型、共用体类型、指针类型和空类型。
02、常量与变量常量其值不可改变,符号常量名通常用大写。
变量是以某标识符为名字,其值可以改变的量。标识符是以字母或下划线开头的一串由字母、数字或下划线构成的序列,请注意第一个字符必须为字母或下划线,否则为不合法的变量名。变量在编译时会为其分配相应存储单元。
03、数组如果一个变量名后面跟着一个有数字的中括号,这个声明就是数组声明。要特别注意的是,方括内的索引值是从 0 算起的。
字符串也是一种数组。它们以 ASCII 的 NULL 作为数组的结束。
04、指针
指针是 C 语言区别于,其他同时代高级语言的主要特征之一。指针是一把双刃剑,许多操作可通过指针自然的表达,但是不正确或过分使用指针又会给程序带来大量潜在的错误。
如一个变量声明时,前面使用 * 号,表明这是个指针型变量。换句话说,该变量存储一个地址,而 *(此处特指单目运算符 * ,下同。C 语言中另有双目运算符 *) 则是取内容操作符,意思是取这个内存地址里存储的内容。
指针不仅可以是变量地址,还可以是数组、数组元素、函数地址。通过把指针作为形式参数,可在函数调用过程得到一个以上的返回值,不同于 return(z)这样仅能得到一个返回值。
05、字符串
C 语言的字符串,其实就是以 '\0' 字符结尾的 char 型数组。
C 语言使用字符型并不需要引用库,但使用字符串就需要 C 标准库里面的一些用于对字符串进行操作的函数。它们不同于字符数组。使用这些函数需要引用头文件 <string.h>。
06、文件 输入/输出
在 C 语言中,输入和输出是经由标准库中的一组函数来实现的。在 ANSI C 中,这些函数被定义在头文件 <stdio.h>;中。
有三个标准输入/输出是标准 I/O 库预先定义的:stdin 标准输入、stdout 标准输出、stderr 输入输出错误。
07、运算
C 语言的运算非常灵活,功能十分丰富,运算种类远多于其它程序设计语言。
在表达式方面较其它程序语言更为简洁,譬如:自加、自减、逗号运算和三目运算使表达式更为简单;但初学者往往会觉得这种表达式难读,关键原因是对运算符和运算顺序理解不透不全。
当多种不同运算组成一个运算表达式,即:一个运算式中出现多种运算符时,运算的优先顺序和结合规则就显得十分重要。
在学习中,对此合理进行分类,找出它们与数学中所学到运算之间的不同点之后,记住这些运算也就不困难了,有些运算符在理解后更要牢记心中,将来用起来得心应手,而有些可暂时放弃不记,等用到时再记不迟。
C 语言运算符按优先程度不同,可分为 15 种优先级,从高到低,优先级为1 ~ 15,除第 2、3 级和第 14 级为从右至左结合外,其它都是从左至右结合,决定同级运算符的运算顺序。
关键字
关键字又称为保留字,就是已被 C 语言本身占用,不能作其它用途使用的字。譬如:关键字不能用作变量名、函数名等标识符。ISO 标准定义的 C 语言关键字:
void char int double _Bool _Complex _Imaginary _Generic
short long (long long) signed unsigned restrict
struct union enum typedef sizeof inline
auto static register extern const volatile
return continue break goto
if else switch case default
01、基本数据类型关键字void:声明函数无返回值或无参数,声明无类型指针,显示丢弃运算结果。(C89 标准新增)
char:字符型类型数据,属于整型数据的一种。(K&R 时期引入)
int:整型数据,表示范围通常为编译器指定的内存字节长。(K&R 时期引入)
float:单精度浮点型数据,属于浮点数据的一种。(K&R 时期引入)
double:双精度浮点型数据,属于浮点数据的一种。(K&R 时期引入)
_Bool:布尔型(C99 标准新增)
_Complex:复数的基本类型(C99 标准新增)
_Imaginary:虚数,与复数基本类型相似,没有实部的纯虚数(C99 标准新增)
_Generic:提供重载的接口入口(C11 标准新增)
02、类型修饰关键字short:修饰int,短整型数据,可省略被修饰的int。(K&R 时期引入)
long:修饰int,长整型数据,可省略被修饰的int。(K&R 时期引入)
long long:修饰int,超长整型数据,可省略被修饰的int。(C99 标准新增)
signed:修饰整型数据,有符号数据类型。(C89 标准新增)
unsigned:修饰整型数据,无符号数据类型。(K&R 时期引入)
restrict:用于限定和约束指针,并表明指针是访问一个数据对象的唯一且初始的方式。(C99 标准新增)
03、复杂类型关键字struct:结构体声明。(K&R 时期引入)
union:联合体声明。(K&R 时期引入)
enum:枚举声明。(C89 标准新增)
typedef:声明类型别名。(K&R 时期引入)
sizeof:得到特定类型或特定类型变量的大小。(K&R 时期引入)
inline:内联函数用于取代宏定义,会在任何调用它的地方展开。(C99 标准新增)
04、存储级别关键字auto:指定为自动变量,由编译器自动分配及释放。通常在栈上分配。与static相反。当变量未指定时默认为auto。(K&R 时期引入)
static:指定为静态变量,分配在静态变量区,修饰函数时,指定函数作用域为文件内部。(K&R 时期引入)
register:指定为寄存器变量,建议编译器将变量存储到寄存器中使用,也可以修饰函数形参,建议编译器通过寄存器而不是堆栈传递参数。(K&R 时期引入)
extern:指定对应变量为外部变量,即标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。(K&R 时期引入)
const:指定变量不可被当前线程改变(但有可能被系统或其他线程改变)。(C89 标准新增)
volatile:指定变量的值有可能会被系统或其他线程改变,强制编译器每次从内存中取得该变量的值,阻止编译器把该变量优化成寄存器变量。(C89 标准新增)
05、跳转结构 流程控制关键字
return:用在函数体中,返回特定值(如果是void类型,则不返回函数值)。(K&R 时期引入)
continue:结束当前循环,开始下一轮循环。(K&R 时期引入)
break:跳出当前循环或 switch 结构。(K&R 时期引入)
goto:无条件跳转语句。(K&R 时期引入)
06、分支结构 流程控制关键字if:条件语句,后面不需要放分号。(K&R 时期引入)
else:条件语句否定分支(与if连用)。(K&R 时期引入)
switch:开关语句(多重分支语句)。(K&R 时期引入)
case:开关语句中的分支标记,与 switch 连用。(K&R 时期引入)
default:开关语句中的 “其他” 分支,可选。(K&R 时期引入)
函数
C 语言程序是由一组变量或是函数的外部对象组成的。
C 语言函数是一个自我包含的完成一定相关功能的执行代码段。函数提供了编制 C 语言程序的手段,使之容易读、写、理解、排除错误、修改和维护。我们可把函数看成一个 “黑盒子”,只要将数据送进去就能得到结果,而函数内部究竟是如何工作的,外部程序是不知道的。外部程序所知道的仅限于输入给函数什么以及函数输出什么。
C 语言程序中函数的数目实际上是不限的,如果说有什么限制的话,那就是,一个 C 程序中必须至少有一个函数,且其中必须有一个且仅有一个以 main 为名的主函数,整个程序从这个主函数开始执行。
C 语言程序鼓励和提倡人们把一个大问题划分成一个个子问题,对应于解决一个子问题编制一个函数;因此,C 语言程序一般是由大量的小函数而不是由少量大函数构成的,即所谓 “小函数构成大程序”。这样的好处是:让各部分相互充分独立,并且任务单一。因而,这些充分独立的小模块也可作为一种固定规格的小 “构件”, 用来构成新的大程序。
函数库
C 语言发展了那么多年来,用 C 语言开发的系统和程序浩如烟海。在发展的同时也积累了很多可直接使用的库函数。
ANSI C 提供了标准 C 语言库函数。
C 语言初学者比较喜欢 Turbo C 2.0 提供的 400多个运行时函数,每个函数可都完成特定功能,用户可随意调用。这些函数总体可分成:输入输出函数、数学函数、字符串和内存函数、与 BIOS 和 DOS 有关的函数、 字符屏幕和图形功能函数、过程控制函数、目录函数等。
Windows 系统提供的 Windows SDK 中包含了数千个跟 Windows 应用程序开发相关的函数。
其他操作系统,譬如:Linux,也同样提供了大量函数让应用程序开发人员调用。
作为程序员应尽量熟悉目标平台库函数其功能。这样才能游刃有余地开发特定平台的应用程序。譬如:作为 Windows 应用程序的开发者,应尽量熟悉 Windows SDK;作为 Linux 应用程序开发者,应尽量熟悉 Linux 系统调用和 POSIX 函数规范。
运算符
C 语言比较特别的是,比特右移(>>)运算符可以是算术(左端补最高有效位)或是逻辑(左端补 0)位移。例如,将 11100011 右移 3 比特,算术右移后成为 11111100,逻辑右移则为 00011100。因算术比特右移较适于处理带负号整数,所以几乎所有的编译器都是算术比特右移。
C 语言运算符的优先级从高到低大致是:单目运算符、算术运算符、关系运算符、逻辑运算符、条件运算符、赋值运算符(=)和逗号运算符。
#运算符作用备注
01
()、 []、 -> 、 .、!、 ++、 --圆括号、方括号、指针、成员、逻辑非、自加、自减
02
++ 、 -- 、 * 、 & 、 ~ 、!单目运算符
+、 - 、 sizeof、(cast)
03
* 、 / 、%算术运算符
04
+ 、 -算术运算符
05
<< 、 >>位运算符
06
< 、 <= 、 > 、 >=关系运算符
07
== 、!=关系运算符号
08
&位与
09
^位异或
10
|位或
11
&&逻辑与
12
||逻辑或
13
? 、:条件运算符
14
/= 、%= 、 &= 、 |= 、 ^=赋值运算符
= 、 += 、 -= 、 *= 、
15
,顺序运算符
版本历史
时间版本事件备注
1978 年K&R C起初,C 语言并没有官方标准
1978 年美国电话电报公司 AT&T 贝尔实验室正式发表 C 语言
布莱恩·柯林汉 Brian Kernighan 和丹尼斯·里奇 Dennis Ritchie 出书 "The C Programming Language"
这本书被 C 语言开发者们称为 K&R,很多年来被当作 C 语言的非正式标准说明;
人们称这个版本的 C 语言为 K&R C
把运算符 =+ 和 =- 改为 += 和 -=;
因为,=+ 和 =- 会使编译器不知道使用者要处理 i = -10 还是 i =- 10,产生混淆。
1970 年到 80 年代 ANSI C / C89C 语言被广泛应用,从大型主机到小型微机,也衍生了很多不同版本
1983 年美国国家标准协会(ANSI)成立了一个 X3J11 委员会,制定 C 语言标准
1989 年ANSI 通过 C 语言标准,称为 ANSI X3.159-1989 "Programming Language C";
简称 C89 标准,也简称 ANSI C
因为,这个标准是美国国家标准协会(ANSI)发布的。
1990 年ISO 和国际电工委员会 IEC 把 C89 标准定为 C 语言国际标准
名为 ISO/IEC 9899:1990 - Programming languages -- C 简称 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 标准
1999 年
C99ISO 和国际电工委员会 IEC 发布 C 语言新标准
名叫 ISO/IEC 9899:1999 - Programming languages -- C简称 C99 标准,这是 C 语言的第二个官方标准
增加了对编译器的限制
譬如:源程序每行要求至少支持到 4095 字节,变量名、函数名要求支持到 63 字节(extern 要求支持到 31);
支持 // 开头的单行注释(这个特性实际上在 C89 的很多编译器上已经被支持了);
格式化字符串中,利用 \u 支持 unicode 字符;
修改了 /% 处理负数时的定义,这样可以给出明确的结果
譬如:在 C89 中 -22 / 7 = -3, -22% 7 = -1,也可以 -22 / 7= -4, -22% 7 = 6
而 C99 中明确为 -22 / 7 = -3, -22% 7 = -1,只有一种结果;
取消了函数返回类型默认为 int 的规定
增加和修改了一些标准头文件,譬如:定义 bool 的 <stdbool.h>
定义一些标准长度的 int 的 <inttypes.h> ,定义复数的 <complex.h>
定义宽字符的 <wctype.h> ,类似于泛型的数学函数 <tgmath.h>, 浮点数相关的 <fenv.h>。
在 <stdarg.h> 增加了 va_copy 用于复制 ... 的参数。里增加了 struct tmx ,对 struct tm 做了扩展;
输入输出对宽字符以及长整数等做了相应的支持;
2001 年 ISO 和国际电工委员会 IEC 发布了 C99 标准修订版
名叫 ISO/IEC 9899:1999/Cor 1:2001简称 C01 标准
2004 年 ISO 和国际电工委员会 IEC 发布了 C99 标准修订版
名叫 ISO/IEC 9899:1999/Cor 2:2004简称 C04 标准
2007 年 ISO 和国际电工委员会 IEC 发布了 C99 标准修订版
名叫 ISO/IEC 9899:1999/Cor 3:2007简称 C07 标准
2011 年
C11ISO 和国际电工委员会 IEC 发布 C 语言新标准
名叫 ISO/IEC 9899:2011 - Information technology -- Programming languages -- C简称 C11 标准,原名 C1X,这是 C 语言的第三个官方标准,也是 C 语言的最新标准
新标准提高了对 C++ 的兼容性,并增加了一些新特性;
对齐处理 (Alignment) 的标准化
包括 _Alignas 标志符,alignof 运算符, aligned_alloc 函数以及 <stdalign.h> 头文件;
多线程 (Multithreading) 支持;
基于 C Unicode 技术报告 ISO/IEC TR 19769:2004,增强了对 Unicode 的支持。
包括为 UTF-16/UTF-32 编码增加了 char16_t 和 char32_t 数据类型,
提供了包含 unicode 字符串转换函数的头文件 <uchar.h>;
删除了 gets() 函数,使用一个新的更安全 gets_s() 函数替代;
增加了边界检查函数接口,定义了新的安全的函数,例如 fopen_s(),strcat_s() 等等;
匿名结构体/联合体支持,这个在 gcc 早已存在,C11 将其引入标准;
静态断言 (static assertions),_Static_assert(),在解释 #if 和 #error 之后被处理;
新的 fopen() 模式,(“…x”),类似 POSIX 中的 O_CREAT|O_EXCL,在文件锁中比较常用;
新增 quick_exit() 函数作为第三种终止程序的方式,当 exit() 失败时可以做最少的清理工作;
2012 年ISO 和国际电工委员会(IEC)发布了 C11 标准修订版
名叫 ISO/IEC 9899:2011/Cor 1:2012简称 C12 标准
http://forum.digitser.cn/data/attachment/forum/201605/19/132155fevczeyds5e5y1wy.jpg"长按二维码" 或 "扫一扫" 关注 "德云社区" 微信公众号
版权声明:
本文为独家原创稿件,版权归 德云社区,未经许可不得转载;否则,将追究其法律责任。
页:
[1]