C语言辅导-ANSI/ISO标准

举报
资源描述
C语言辅导:ANSI / ISO标准 一个C程序员会期望一个C程序无论是在哪里开发的,在另一个编译程序 中都能通过编译。实际上不能完全做到这一点,由于很多头文件和函数库 都是针对某些特定的编译程序或平台的。有些〔很少!〕语言扩大性能,例 如基于Intel的编译程序所使用的near和far关键字以及存放器伪变量, 也只不过是某种平台的开发商们所认可的一种标准。 假如你认为靠一种标准走遍天下是理所固然的,就象左脚踩加速器, 右脚踩刹车一样,那么你的视野未免有些狭窄。有两种不同的BASIC标准, 但都没有得到广泛的支持;世界上最流行的Pascal编译程序并不符合正 式的标准;现在正在进展的C++标准,由于变化太快,也没有得到广泛的 支持;有些实现遵循一种严格的Ada标准,但Ada标准也没能大规模地占 据世界市场。 从技术上讲有两种C语言标准,一种来自ANSI〔American National Standard Institute,美国国家标准协会〕X3J11委员会,另一种来自 ISO〔International Standard Organization,国际标准协会〕9899—1990。 由于ISO标准中的某些改良优于ANSI标准,而ANSI标准也承受了这个国 际版本,因此“ANSI / ISO标准〞是一种正确的说法。 那么,这种标准对你有什么帮忙呢?你可以买到一份该标准的副本, 即 Herbert Schildt 所着的〔〔The Annotated ANSI C Standard》〔OsborneMcGraw-Hill出版,ISBN O-07-881952-O〕 —书,该书对语言和库都作了 介绍,并带有解释。这本书比大多数正式标准要廉价多了,后者由ANSI 和ISO出售,以解决建立标准所需的局部费用。并不是每一个C程序员都 需要这样一本书,但它是最权威的。 最重要的一点是,ANSI / ISO标准是对“什么是c?〞这一问题的权威 解答。假如编译程序开发商所做的某些实现不符合这一标准,你可以把它 作为错误指出来,这不会引起争辩。 ANSI / ISO标准也不是包罗万象的。详细地说,它没有涉及c程序可 能会做的很多好玩的事情,例如图形或多任务。很多兼容性不强的标准包 含了这些内容,其中的一些将来可能会成为权威的标准,因此你不必完全 拘泥于ANSI / ISO标准。 顺便提一句,除编程语言之外,还有很多东西也有ANSI标准,其中 的一种就是ANSI为全屏幕文本操作的退出序列集合而写的标准,在第17 章中所介绍的MS—DOS的“ANSI驱动程序〞指的就是这种标准〔好玩的是, MS-DOS的ANSI. SYS只实现了 ANSI标准序列中的一小局部〕。 16 . 1 运算符的优先级总能起作用吗? 有关运算符优先级的规章略微有点简单。在大多数状况下,这些规章 的确是你所需要的,然而,有人也指出其中的一些规章原来是可以设计得 更好的。 让我们快速地回忆一些有关内容:“运算符优先级〞是这样一些规章 的集合一一这些规章规定了 “运算符〞〔例如+,-,等等〕的优先性,即哪 一种运算符先参与运算。在数学中,表达式“2X3+4X5〞和“〔2X3〕 + 〔4 X5〕〞是等价的,由于乘法运算在加法运算之前进展,也就是说乘法的优 先级比加法高。 在c中,有16级以上的运算符优先级。尽管这么多的规章有时使c 程序不易阅读,但也使C程序写起来简单多了。虽然这不是的一种折衷方 法,但这就是C所采纳的方法。表16. 1总结了运算符的优先级。 表16. 1运算符优先级总结〔从高到低〕 优先级 运算符 1 x[y]〔 下标〕 x(y)( 函数调用〕 x ・y〔访问成员〕 x->y( 访问成员指针〕 x++( 后缀自增〕 x——( 后缀自减〕-- 2 ++x( 自增) —x( 自减〕 &x( 取地址〕 *x( 指针引用〕 +x( 同x,和数学中一样〕 -x( 数学求负〕 !x( 规律非〕 〜 x〔按位求反〕 sizeof x 和sizeof〔x_t〕〔字节数大小〕 3 〔x_t〕y〔 强制类型转换〕 4 x*y( 乘法〕 x / y〔除法〕 x %y〔求余〕 5 x+y( 加法〕 x-y( 减法〕 6 x>y( 按位右移〕 7 xy ,x=y〔关系比拟〕 8 x==y ,x!=y〔相等比拟〕 9 x&y( 按位与〕 10 x\( 按位异或〕 . 11 x y( 按位或〕 12 x&&y〔 规律与〕 13 x||y〔 规律或〕 14 x?y : z 〔条件〕 x二y , x*=y, x / =y, x+=y, x-=y, >=, &=, = | =〔赋 值,右结合性〕 16 x , y〔逗号〕 优先级的是后缀表达式,即运算符跟在一个表达式后面;其次是前缀 或单目表达式,即运算符位于一个表达式的前面;再次是强制类型转换表 达式。 留意:关于运算符优先级,最重要的是知道*p++和*(p++)是等价的。 也就是说,在*p++中,++运算符作用在指针上,而不是作用在指针所指向 的对象上。象"*p++=*q++;这样的代码在C中是随处可见的,其中的优 先级和“(*(p++)) = (*(q++)) 〞中的是一样的。这个表达式的含义是“q+1, 但仍用q原来的值找到q所指向的对象;p加1,但仍用p原来的值;把 q所指向的对象赋给p所指向的对象〞,整个表达式的值就是原来q所指 向的对象。在C中你会常常看到这样的代码,并且你会有很多时机去写这 样的代码。对于其它运算符,假如你记不住其优先级,可以查阅有关资料, 但是,一个好的c程序员应当连想都不用想就能明白*p++的含义。 最初的C编译程序是为这样一种计算机编写的一一它的某些指令对 象*p++和*?++=*4++这样的代码的处理效率高得令人难以置信,因此,许 多C代码就写成这种形式了。进一步地,由于象这样的C代码实在太多了, 所以新机型的设计者会保证供应能特别高效地处理这些C代码的指令。 再下一级的优先级是乘法、除法和求余〔也叫取模〕,再往后是加法和 减法。与数学中的表达式一样,“2*3+4*5〞和“〔2*3〕 + 〔4*5〕〞是等价的。
展开阅读全文
温馨提示:
金锄头文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
相关资源
正为您匹配相似的精品文档
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > 总结/计划/报告


电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号