C语言辅导:ANSI/ISO标准

C语言辅导:ANSI/ISO标准,第1张

C语言辅导:ANSI/ISO标准,第2张

不了解C语言标准的价值,就不知道自己有多幸运。
一个C程序员会期望一个C程序无论在哪里开发都可以在另一个编译器中编译。其实完全做不到,因为很多头文件和函数库都是针对某个特定的编译器或平台的。一些(很少!)语言扩展性能,比如基于Intel的编译器使用的远近关键字和寄存器伪变量,只是某个平台的开发者认可的标准。【/br/】如果你想当然地认为一个标准就可以走遍天下,就像左脚踩油门,右脚踩刹车一样,那你的视野就比较狭隘了。有两种不同的基本标准,但没有得到广泛支持;世界上最流行的Pascal编译器不符合形式标准;发展中的C++标准由于变化快,没有得到广泛支持。一些实现遵循严格的Ada标准,但是Ada标准未能大规模占领世界市场。
从技术上讲,C语言标准有两个,一个来自ANSI(美国国家标准协会)的委员会X3J11,另一个来自ISO(国际标准组织)9899-1990。由于ISO标准中的一些改进优于ANSI标准,ANSI标准也接受这个国际版本,“ANSI/ISO标准”是正确的说法。
那么,这个标准对你有什么帮助呢?你可以买一本这个标准,就是赫伯特·席尔德写的带注释的ansi c标准(Osborne McGraw-hill出版,ISBN O-07-881952-O),带注释的介绍语言和库。这本书比大多数正式标准便宜得多,这些标准由ANSI和ISO出售,以支付建立标准的部分成本。不是每个C程序员都需要这样的书,但它是最权威的。
最重要的一点是,ANSI/ISO标准是为了“什么是C?”这个问题的权威答案。如果编译器开发者做的一些实现不符合这个标准,你可以指出来作为错误,这样不会引起争议。
ANSI/ISO标准并非包罗万象。具体来说,它不涉及C程序可能会做的许多有趣的事情,例如图形或多任务处理。很多兼容性比较弱的标准都包含了这些内容,其中的一些将来可能会成为权威标准,所以你不必完全拘泥于ANSI/ISO标准。
对了,除了编程语言之外,还有很多东西是有ANSI标准的,其中一个就是ANSI为全屏文本操作的退出序列集合编写的标准。第17章介绍的MS-DOS的“ANSI驱动”就是指这个标准(有趣的是,ANSI。MS-DOS的SYS只实现了ANSI标准序列的一小部分)。

6.1运算符的优先级是否总是有效?
关于运算符优先级的规则有点复杂。在大多数情况下,这些规则才是你真正需要的。然而,也有人指出,其中一些可以设计得更好。
我们来快速回顾一下关于它的一些东西:“运算符优先级”是一组规定“运算符”优先顺序的规则(如+、-等。),即哪个操作员先参与操作。在数学中,“2×3+4×5”和“(2×3)+(4×5)”这两个表达式是等价的,因为乘法是在加法之前进行的,也就是说乘法的优先级高于加法。
在C #中,运算符优先级超过16级。虽然如此多的规则有时会使C程序难以阅读,但它们也使C程序更容易编写。虽然这不是一个折中的方法,但这是c采用的方法,表16.1总结了运算符的优先级。
表16.1操作员优先级汇总(从高到低)
-。X->y(访问成员指针)
x++(后缀自增)
x-(后缀自减)
2++x(自增)
-x(自减)
&x(逻辑求反)
~ X(按位求反)
sizeof x和sizeof(x_t)(字节大小)
3 (x_t)y(强制类型转换)[/Br/]4 X *=y(相等比较)
9 x&y(按位AND)
10X Y(按位XOR)。
11X | Y(按位OR)
12 x&&y(逻辑AND)
。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++和*p++=*q++的效率高得令人难以置信,所以很多C代码都是以这种形式编写的。再者,因为像这样的C代码太多了,所以新型号的设计者会保证提供能够非常高效地处理这些C代码的指令。
下一个优先级是乘法、除法和余数(也叫模),然后是加法和减法。作为数学中的表达式,“2*3+4*5”和“(2*3)+(4*5)”是等价的。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » C语言辅导:ANSI/ISO标准

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情