现在的位置: 首页 > 综合 > 正文

《C专家编程》笔记

2017年01月08日 ⁄ 综合 ⁄ 共 742字 ⁄ 字号 评论关闭
1、 整型数右移,要不要扩展符号位,在标准里并未明确该怎么做。有的编译器扩展了符号位,但还有一些并未扩展,所以,为保证                    代码的可移植性,应该这样写:a = (b >> 3) & 0x0f;

2、 x = f() + g() * h();
    f()的返回值是一个意群,g()和h()返回值的乘积组成另外一个意群。但g()并不一定比h()先调用,f()也并不一定早于g()和h()调用,               f()可能在乘法之前调用,也可能在乘法之后,也可能在g()和h()之间调用。C语言(大部分其他语言)标准没有定义调用次序,只能保证                乘法必定先于加法计算。之所以这样做,是想让编译器充分利用自身架构的特点,或者充分利用存储于寄存器中的值。
    例如:x = a++  +  a++;在不同的编译器中有不同的解释。
    如上所述,大部分表达式中各个操作数的计算顺序都是不固定的,由编译器决定。但某些操作符,如&&和||则是固定的从左到        右。另外,在函数调用中,各个参数的计算顺序也是不确定的,如:a(x++, x++);

3、C语言中,操作符的优先级设计的并不完美,所以尽量多使用圆括号"()"来保证代码按自己的意图运行。甚至只需牢记两个优先级就够了:乘法和除法优先级加法和减法,涉及到其他操作符时一律用括号。

4、作者推荐的书籍:
    《The Elements of Programming Style》, Kernighan和Plauger
    《Data Structures with Abstract Data Types》, Daniel F.Stubb和Neil W.Webre
    《The Art of Computer Programming》,Donald Knuth

抱歉!评论已关闭.