C99 与 C90 标准的不同之处

作者&投稿:缪实 (若有异议请与网页底部的电邮联系)
C99标准为什么查不到~

是一份文档,由那些标准制定委员会(ANSI、ISO之类的)制定的,它里面描述了C语言应该遵守的规则。

这时搜索结果,有不少下载链接:http://www.baidu.com/s?tn=monline_4_dg&ie=utf-8&bs=C99&f=8&rsv_bp=1&wd=C99%E6%96%87%E6%A1%A3&rsv_sug3=1&rsv_sug=1&rsv_sug1=1&rsv_sug4=224&inputT=1899

1、增加restrict指针
C99中增加了公适用于指针的restrict类型修饰符,它是初始访问指针所指对象的惟一途径,因此只
有借助restrict指针表达式才能访问对象。restrict指针指针主要用做函数变元,或者指向由malloc()函
数所分配的内存变量。restrict数据类型不改变程序的语义。
如果某个函数定义了两个restrict指针变元,编译程序就假定它们指向两个不同的对象,memcpy()
函数就是restrict指针的一个典型应用示例。C89中memcpy()函数原型如下:
代码:
void *memcpy (void *s1, const void *s2, size_t size);如果s1和s2所指向的对象重叠,
其操作就是未定义的。memcpy()函数只能用于不重叠的对象。C99中memcpy()函数原型如下:
代码:
void *memcpy(void *restrict s1, const void *restrict s2,size_t size);通过使用restrict
修饰s1和s2 变元,可确保它们在该原型中指向不同的对象。
2、inline(内联)关键字
内联函数除了保持结构化和函数式的定义方式外,还能使程序员写出高效率的代码。函数的每次调用与
返回都会消耗相当大的系统资源,尤其是当函数调用发生在重复次数很多的循环语句中时。一般情况下,当发
生一次函数调用时,变元需要进栈,各种寄存器内存需要保存。当函数返回时,寄存器的内容需要恢复。如果该
函数在代码内进行联机扩展,当代码执行时,这些保存和恢复操作旅游活动会再发生,而且函数调用的执
行速度也会大大加快。函数的联机扩展会产生较长的代码,所以只应该内联对应用程序性能有显著影响的
函数以及长度较短的函数。
3、新增数据类型
_Bool
值是0或1。C99中增加了用来定义bool、true以及false宏的头文件夹,以便程序
员能够编写同时兼容于C与C++的应用程序。在编写新的应用程序时,应该使用
头文件中的bool宏。
_Complex and _Imaginary
C99标准中定义的复数类型如下:float_Complex; float_Imaginary; double_Complex;
double_Imaginary; long double_Complex; long double_Imaginary.
头文件中定义了complex和imaginary宏,并将它们扩展为_Complex和_Imaginary,
因此在编写新的应用程序时,应该使用头文件中的complex和imaginary宏。
long long int
C99标准中引进了long long int(-(2e63 - 1)至2e63 - 1)和unsigned long long int(0 - 2e64
- 1)。long long int能够支持的整数长度为64位。

应该是C89和C99吧,这两个标准的格式有些不同,再就是添加了不少东西进去了,一般C89的程序都可以在C99的平台上编译通过,但是C99的东西在C89的平台上就可能编译不过了。C99感觉到的最大不同就是函数的括号里的参数要写出来,比如 int main()如果没有参数就要写成int main(void),其他函数也是一样。如果你用的平台不支持C99,你就换一个吧,呵呵,不然很痛苦的。


筠连县17010344242: C99 与 C90 标准的不同之处 -
叔委米格: 应该是C89和C99吧,这两个标准的格式有些不同,再就是添加了不少东西进去了,一般C89的程序都可以在C99的平台上编译通过,但是C99的东西在C89的平台上就可能编译不过了. C99感觉到的最大不同就是函数的括号里的参数要写出来,比如 int main()如果没有参数就要写成int main(void),其他函数也是一样. 如果你用的平台不支持C99,你就换一个吧,呵呵,不然很痛苦的.

筠连县17010344242: c语言c90编译器.
叔委米格: C90这个编译器是比较老了,现在一般都用C99了.

筠连县17010344242: C语言里面字符串函数 strcmp bcmp区别?? -
叔委米格: bcmp memcmp功能相同.bcopy、bzero和bcmp是传统BSD的函数,属于POSIX标准;mem*是C90(以及C99)标准的C函数.区别在于,如果你打算把程序弄到一个符合C90/C99,但是不符合POSIX标准的平台时,后者比较有优势.strcmp与这两者不同处在于它接受的是0结尾的字符串,比如你有2个内存区域的值分别为 0x0a, 0x00, 0x0d与0x0a, 0x00, 0x0c.那么比较这2个内存的前3个字符是否相同,strcmp就无法做到,因为到第二字符0的时候函数就任务字符串结束了.

筠连县17010344242: C语言字符串处理函数strcmp -
叔委米格: 因为C语言中,数组初始化时,如果给定的初始值个数小于数组长度,那么后面的剩余元素将被自动初始化为0,也就是字符串的结束标志'\0'strcmp()函数就是用于查找两个以'\0'结束的字符串中的第一个不相同的字符的ASCII值之差,如果将数组长度改为5,那么strcmp函数在前5个字符中找不到结束标志,又因为程序不会对边界进行检查,所以会一直找下去,而此时,早已越界,所以会输出不可预见的结果.

筠连县17010344242: Go语言中用下标访问string类型,输出的是什么编码 -
叔委米格: C89/C90标准:定义数组时下标只允许使用整型、字符型常量.引用数组时下标可以使用整型、字符型的常量或者变量.C99标准:定义数组时下标可以使用整型、字符型的常量或变量,但变量必须已经赋值.引用数组时下标可以使用整型、字符型的常量或者变量.以上所说的常量及变量均包含表达式.

筠连县17010344242: C程中int main和 void main有什么本质区别么,是不是就是int main需要返回值这一个区别? -
叔委米格: 老版本的C代码以main()这种形式开始.C90标准允许这种形式,但是C99标准不允许.因此即使你当前的编译器允许,也不要这么写.void main() 有些编译器允许这种形式,但是还没有任何标准考虑接受它.int main() main()函数的返...

筠连县17010344242: 计算机C语言发展简史是什么啊?
叔委米格: C语言发展简史 【起源】 C 语言最早的原型是 ALGOL 60 1963 年,剑桥大学将其发... 除了标准文档在印刷编排上的某些细节不同外,ISO C(C90) 和 ANSI C(C89) 在技术...

筠连县17010344242: C++ Primer Plus和C++ Primer这两本书有什么区别 -
叔委米格: c primer plus这本书我看了,主要是介绍C99的语法特性,它将C90和C99做了一个对比,说明C语言新增的语法,例如复合文字,变长数组VLA,变量可以在函数的任意位置定义,支持宽字符类型等等. C专家编程我也看过,主要是从设计编译器的人的角度来...

筠连县17010344242: C99和C89,的区别 -
叔委米格: 标准,新增一些特性.和规范某些代码,其他无大改动.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网