1.C99是什么?什么是C99标准?与C89标准相比,C99标准有哪些新特性
1.什么是C99
本书涉及的大部分C语言技术知识都是ANSI C标准实现的,ANSI C标准是在1989年提出的,故通常称之为C89标准。在ANSI标准化后,C语言的标准在相当长的一段时间内都保持不变,尽管C++在不断地改进(实际上,Normative Amendment1在1995年已经开发了一个新的C语言版本,但是这个版本很少为人所知)。这一局面直到1999年才有所改变,这就是ISO9899:1999的问世。该版本就是通常提及的C99,它被ANSI于2000年3月采用。其实在初学阶段C89和C99的区别是不易察觉的,所以有许多人还没有注意到C99。下面就来了解一下C99新修改了哪些方面的内容。
C99标准是在ANSI C(C89)标准的基础上发展起来的,较C89增加了许多方面的内容,例如基本数据类型、关键字和一些系统函数等。
2.C99有哪些新特性
https://www.cnblogs.com/wuyudong/p/c99-new-feature.html
C99和C89的大多数特性基本相同,差别很小。在C99中,其新增特性简单地归结为以下几点。
(1)对编译器限制增加了,比如源程序每行要求至少支持4095字节,变量名、函数名要求支持63字节。
(2)支持//行注释。
例如:
#include
main()
{
int i,j; /*定义变量i和j*/
i=90; /*给变量i赋值90*/
j=i*i; /*j等于i*i*/
printf("%d",j); /*将j的值输出*/
}
上面的注释使用的是/* */,在C99标准下也可以将注释写成如下的形式(大部分编译器支持)。
#include
main()
{
int i,j; //定义变量i和j
i=90; //给变量i赋值90
j=i*i; //j等于i*i
printf("%d",j); //将j的值输出
}
(3)增加了新关键字restrict、inline、_Complex、_Imaginary、_Bool。
restrict:该关键字只用来修饰指针。表明restrict类型的指针是访问一个数据对象的且初始的方式,其他指针必须要基于个指针才能对对象进行存取。restrict指针主要用作函数变元,或者指向由malloc()函数所分配的内存变量。restrict数据类型不改变程序的语义。
inline:该关键字用在函数之前,表示该函数为内联函数,程序在编译的时候直接扩展为函数的代码,而不是调用函数。内联函数除了保持结构化和函数式的定义方式外,还能使程序员写出高效率的代码。函数的每次调用与返回都会消耗相当多的系统资源,尤其是当函数调用发生在重复次数很多的循环语句中时。一般情况下,当发生一次函数调用时,变元需要进栈,各种寄存器内存需要保存。当函数返回时,寄存器的内容需要恢复。如果该函数在代码内进行联机扩展,当代码执行时,这些保存和恢复操作会再次发生,而且函数调用的执行速度也会大大加快。函数的联机扩展会产生较长的代码,所以只应该内联对应用程序性能有显著影响的函数以及长度较短的函数。
_Bool:布尔类型,该类型有两个常量true和false。C99中增加了用来定义bool、true以及false宏的头文件
_Complex和_Imaginary:C99标准中定义的复数类型如下。
float_Complex
float_Imaginary
double_Complex
double_Imaginary
long double_Complex
long double_Imaginary
2.ANSI是一种字符代码,为使计算机支持更多语言,通常使用 0x00~0x7f 范围的1 个字节来表示 1 个英文字符。超出此范围的使用0x80~0xFFFF来编码,即扩展的ASCII编码。为使计算机支持更多语言,通常使用 0x80~0xFFFF 范围的 2 个字节来表示 1 个字符。比如:汉字 '中' 在中文操作系统中,使用 [0xD6,0xD0] 这两个字节存储。
不同的国家和地区制定了不同的标准,由此产生了 GB2312、GBK、GB18030、Big5、Shift_JIS 等各自的编码标准。这些使用多个字节来代表一个字符的各种汉字延伸编码方式,称为 ANSI 编码。在简体中文Windows操作系统中,ANSI 编码代表 GBK 编码;在繁体中文Windows操作系统中,ANSI编码代表Big5;在日文Windows操作系统中,ANSI 编码代表 Shift_JIS 编码。 [1]
简单的说,在简体中文系统下,ANSI编码代表GB2312编码;在日文操作系统下,ANSI编码代表JS编码。 [2]
不同 ANSI 编码之间互不兼容,当信息在国际间交流时,无法将属于两种语言的文字,存储在同一段 ANSI 编码的文本中。ANSI编码表示英文字符时用一个字节,表示中文用两个或四个字节。
ANSI编码作为中国以及部分亚太地区的多字符编码格式,Windows系统和OS X都是提供原生支持的。但是即便如此,许多国外开发者仍然在开发笔记或者文字录入类应用的时候将ANSI编码完全忽略,只加入全球通用的UTF-8编码。
其他字符代码
编辑
在实际应用中接触比较多的文本编码有3种:ASCII、ANSI和UNICODE,其中ASCII码是后两种也是大多数常用编码的基础。 [1]
M
M
-
ASCII码
文本编码方式的基础是ASCII码,它是一个7位的编码标准,包括26个小写字母、26个大写字母、10个数字、32个符号、33个控制代码和一个空格,共128个代码。由于计算机通常采用“字节”为单位存储和>> 交换数据信息,因此很多计算机厂家对ASCII码进行了扩充,在原来的基础上又增加了128个附加字符,如ANSI、UNICODE等字符集。 -
UNICODE
对于英文来讲,ASCII码就足以编码所有字符,但对于中文,则必须使用两个字节来代表一个汉字,这种表示汉字的方式习惯上称为双字节。虽然双字节可以解决中英文字符混合使用的情况,但对于不同字>> 符系统而言,就要经过字符码转换,非常麻烦,如中英、中日、日韩混合的情况。为解决这一问题,很多公司联合起来制定了一套可以适用于全世界所有国家的字符码,不管是东方文字还是西方文字,一律>> 用两个字节来表示,这就是UNICODE。