C99标准的新特性

在ANSI标准化后,C语言的标准在一段相当的时间内都保持不变,尽管C++继续在改进。(实际上,Normative Amendment1在1995年已经开发了一个新的C语言版本。但是这个版本很少为人所知。)标准在90年代才经历了改进,这就是ISO9899:1999(1999年出版)。这个版本就是通常提及的C99。它被ANSI于2000年3月采用。
  在C99中包括的特性有:
  对 编译器限制增加了, 比如源程序每行要求至少支持到 4095 字节变量名函数名的要求支持到 63 字节 (extern 要求支持到 31)。
  预处理增强了。例如:
  宏支持取参数 #define Macro(...) __VA_ARGS__
  使用宏的时候,参数如果不写,宏里用 #,## 这样的东西会扩展成空串。(以前会出错的)
  支持 // 行注释(这个特性实际上在C89的很多编译器上已经被支持了)
  增加了新关键字 restrict,inline,_Complex,_Imaginary,_Bool
  支持 long long,long double _Complex,float _Complex 这样的类型
  支持 <: :> <% %> %: %:%: ,等等奇怪的符号替代,D&E 里提过这个
  支持了不定长的 数组。数组的长度就可以用变量了。声明类型的时候呢,就用 int a[*] 这样的写法。不过考虑到效率和实现,这玩意并不是一个新类型。所以就不能用在全局里,或者 struct union 里面,如果你用了这样的东西,goto 语句就受限制了。
  变量声明不必放在语句块的开头,for 语句提倡这么写 for(int i=0;i<100;++i) 就是说,int i 的声明放在里面,i 只在 for 里面有效。(VC没有遵守这条标准,i 在 for 外也有效;但vc2005里已经默认是i在外面不可见了,但有编译选项可以设置。)
  当一个类似结构的东西需要临时构造的时候,可以用 (type_name){xx,xx,xx} 这有点像 C++ 的 构造函数
  初始化结构的时候现在可以这样写:
  struct {int a[3], b;} hehe[] = { [0].a = {1}, [1].a = 2 };
  struct {int a, b, c, d;} hehe = { .a = 1, .c = 3, 4, .b = 5} // 3,4 是对 .c,.d 的赋值
   字符串里面,\u 支持 unicode 的字符
  支持 16 进制的浮点数的描述
  所以 printf和scanf 的格式化串多了支持 ll / LL (VC6 里用的 I64) 对应新的 long long 类型。
  浮点数的内部数据描述支持了新标准,这个可以用 #pragma 编译器指定
  除了已经有的 __line__ __file__ 以外,又支持了一个 __func__ 可以得到当前的函数名
  对于非常数的 表达式,也允许编译器做化简
  修改了对于 / % 处理负数上的定义,比如老的标准里 -22 / 7 = -3,-22 % 7 = -1 而现在 -22 / 7 = -4,-22 % 7 = 6
  取消了不写函数返回类型默认就是 int 的规定
  允许 struct 定义的最后一个数组写做 [] 不指定其长度描述
  const const int i; 将被当作 const int i; 处理
  增加和修改了一些标准头文件。比如定义 bool 的 <stdbool.h>,定义一些标准长度的 int 的 <inttypes.h>,定义复数的 <complex.h> 定义宽字符的 <wctype.h> 有点泛型味道的数学函数 <tgmath.h> 跟浮点数有关的 <fenv.h>。< stdarg.h> 里多了一个 va_copy 可以复制 ... 的参数。<time.h> 里多了个 struct tmx 对 struct tm 做了扩展
  输入输出对宽字符还有长整数等做了相应的支持
  long double_Complex;long double_Imaginary。
  <complex.h>头文件中定义了complex和imaginary宏,并将它们扩展为_Complex和_Imaginary,因此在编写新的 应用程序时,应该使用<stdbool.h>头文件中的complex和imaginary宏。
  long long int
  C99标准中引进了long long int(-(2e63 - 1)至2e63 - 1)和unsigned long long int(0 - 2e64 - 1)。long long int能够支持的整数长度为64位。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。在编写C程序时,需要注意变量的声明和定义、指针的使用、内存的分配与释放等问题。C语言中常用的数据结构包括: 1. 数组:一种存储同类型数据的结构,可以进行索引访问和修改。 2. 链表:一种存储不同类型数据的结构,每个节点包含数据和指向下一个节点的指针。 3. 栈:一种后进先出(LIFO)的数据结构,可以通过压入(push)和弹出(pop)操作进行数据的存储和取出。 4. 队列:一种先进先出(FIFO)的数据结构,可以通过入队(enqueue)和出队(dequeue)操作进行数据的存储和取出。 5. 树:一种存储具有父子关系的数据结构,可以通过中序遍历、前序遍历和后序遍历等方式进行数据的访问和修改。 6. 图:一种存储具有节点和边关系的数据结构,可以通过广度优先搜索、深度优先搜索等方式进行数据的访问和修改。 这些数据结构在C语言中都有相应的实现方式,可以应用于各种不同的场景。C语言中的各种数据结构都有其优缺点,下面列举一些常见的数据结构的优缺点: 数组: 优点:访问和修改元素的速度非常快,适用于需要频繁读取和修改数据的场合。 缺点:数组的长度是固定的,不适合存储大小不固定的动态数据,另外数组在内存中是连续分配的,当数组较大时可能会导致内存碎片化。 链表: 优点:可以方便地插入和删除元素,适用于需要频繁插入和删除数据的场合。 缺点:访问和修改元素的速度相对较慢,因为需要遍历链表找到指定的节点。 栈: 优点:后进先出(LIFO)的特性使得栈在处理递归和括号匹配等问题时非常方便。 缺点:栈的空间有限,当数据量较大时可能会导致栈溢出。 队列: 优点:先进先出(FIFO)的特性使得

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值