打印

  C语言c99的标准

[复制链接]
1159|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 凌阳教育sunplus 于 2016-12-26 11:46 编辑

     现在很多的编程人员都认为C++语言是一门独立的语言,并不是在C语言的基础上,可以直接学习C++不必先从C下手,可是这个观点并不是代表所有编程人员的想法,不知道大家对于C语言熟悉吗?凌阳教育为大家介绍一个C语言中c99的标准是什么?

  1999年1月,国际标准化组织(ISO)和国际电工委员会(IEC)发布了C语言的新标准,名叫ISO/IEC 9899:1999 - Programming languages -- C [8] ,简称C99标准。这是C语言的第二个官方标准。

  在C99中包括的特性有:增加了对编译器的限制,比如源程序每行要求至少支持到 4095 字节,变量名函数名的要求支持到 63 字节(extern 要求支持到 31)

  增强了预处理功能。例如:

  支持 // 开头的单行注释(这个特性实际上在C89的很多编译器上已经被支持了)

  宏支持取可变参数 #define Macro(...) __VA_ARGS__

  使用宏的时候,允许省略参数,被省略的参数会被扩展成空串。

  增加了新关键字 restrict, inline, _Complex, _Imaginary, _Bool

  支持 long long, long double _Complex, float _Complex 等类型

  支持不定长的数组,即数组长度可以在运行时决定,比如利用变量作为数组长度。声明时使用 int a[var] 的形式。不过考虑到效率和实现,不定长数组不能用在全局,或 struct 与 union 里。

  变量声明不必放在语句块的开头,for 语句提倡写成 for(int i=0;i<100;++i) 的形式,即i 只在 for 语句块内部有效。

  允许采用(type_name){xx,xx,xx} 类似于 C++ 的构造函数的形式构造匿名的结构体。

  复合字面量:初始化结构的时候允许对特定的元素赋值,形式为:

  struct test{int a[3],b;} foo[] = { [0].a = {1}, [1].a = 2 };

  struct test{int a, b, c, d;} foo = { .a = 1, .c = 3, 4, .b = 5 }; // 3,4 是对 .c,.d 赋值的

  格式化字符串中,利用 \u 支持 unicode 的字符。

  支持 16 进制的浮点数的描述。

  printf scanf 的格式化串增加了对 long long int 类型的支持。

  浮点数的内部数据描述支持了新标准,可以使用 #pragma 编译器指令指定。

  除了已有的 __line__ __file__ 以外,增加了 __func__ 得到当前的函数名。

  允许编译器化简非常数的表达式。

  修改了 /% 处理负数时的定义,这样可以给出明确的结果,例如在C89中-22 / 7 = -3, -22% 7 = -1,也可以-22 / 7= -4, -22% 7 = 6。 而C99中明确为 -22 / 7 = -3, -22% 7 = -1,只有一种结果。

  取消了函数返回类型默认为 int 的规定。

  允许 struct 定义的最后一个数组不指定其长度,写做 [](flexible array member)。

  const const int i 将被当作 const int i 处理。

  增加和修改了一些标准头文件,比如定义 bool 的 ,定义一些标准长度的 int 的 ,定义复数的 ,定义宽字符的 ,类似于泛型的数学函数 , 浮点数相关的 。 在 增加了 va_copy 用于复制 ... 的参数。里增加了 struct tmx ,对 struct tm 做了扩展。

  输入输出对宽字符以及长整数等做了相应的支持。

  GCC和其它一些商业编译器支持C99的大部分特性。
凌阳教育制订了完善的管理体系和监督系统,包括教学评价系统,就业反馈系统、阶段考核系统、学生管理制度、项目奖励制度等,保证学生思想、学习全方面提升。对于C语言,不知道大家的想法是什么,很期待。

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

3

帖子

1

粉丝