第194章C专家编程

作者:从前有只坏猪 加入书签推荐本书

模很小的硬件系统中。multics成了总结工程教训的宝库,但它同时也为c语言体现“小即是美”铺平了道路……”

虽然这些话都是比较空洞的讲述历史,但章杉恰恰就吃这一套

对于上来就用极其专业的语言来讲述c语言该如何如何的,章杉半点好感都没有!

良好的开头是成功的一半

不知不觉中,章杉便入了迷

作者还是十分较真的,在书里认真地探讨了是先有c语言还是先有unix呢?

说起这个问题,人们很容易陷入先有鸡还是先有蛋的死循环中

然而,作者讨论的不是家禽趣闻,而是编程故事。

这本书中作者认真地指出,unix比c语言出现得早。

这也是为什么unix的系统时间是从1970年1月1日起按秒计算的,它就是那时候产生的啊

不过说起来这本书里面描写c历史的篇幅是相当有限的!

之后则完完全全的干货满满

“尽量不要在你的代码中使用无符号类型,以免增加不必要的复杂性。尤其是,不要仅仅因为无符号数不存在负值(如年龄、国债)而用它来表示数量。尽量使用像int那样的有符号类型,这样在涉及升级混合类型的复杂细节时,不必担心边界情况(如-1被翻译为非常大的正数)。只有在使用位段和二进制掩码时,才可以用无符号数。应该在表达式中使用强制类型转换,使操作数均为有符号数或者无符号数,这样就不必由编译器来选择结果的类型。”

“许多操作数类型为算术类型的双目运算符会引发转换,并以类似的方式产生结果类型。...如果其中一个操作数的类型是unsignedlongint,那么另一个操作数也被转换为unsignedlongint。其次,如果其中一个操作数的类型是longint,而另一个操作数的类型是unsignedint,如果longint能够完整表示unsignedint的所有值,那么unsignedint类型操作数被转换为longint,如果longint不能完整表示unsignedint的所有值,那么两个操作数都被转换为unsignedlongint。再次,如果其中一个草所属的类型是longint,那么另一个操作数被转换为longint。再再次,如果其中一个操作数的类型是unsignedint,那么另一个操作数被转换为unsignedint。”

“……”

“除了递归调用之外,堆栈并非必需。因为在编译时可以知道局部变量、参数和返回地址所需空间的固定大小,并可以将它们分配于bss段。basic,cobol和fortran的早期编译器并不允许函数的递归调用,所以它们在运行时并不需要动态的堆栈。允许递归调用意味着必须找到一种方法

上一章 返回目录 下一章