Expert C Programming 总结(五)

来源:互联网 发布:马佳佳 知乎 编辑:程序博客网 时间:2024/05/15 01:36


 1. 标准C语言具有八进制,十进制和十六进制常量,但是没有二进制常量。


 2. 警惕! 真正值得注意之处———参数也会被提升!另一个会发生隐式类型转换的地方就是参数传递。这就是为什么单个的printf()格式字符串%d能适用用于几个不同类型,short,char或int,而不论实际传递的是上述类型的哪一个。函数从堆栈中(或寄存器中)取出来的参数总是int类型。

 

3. 隐式类型转换是语言中的一种临机手段,起源于简化最初的编译器的想法。把所有的操作数转换为统一的长度极大的简化了代码的生成。这样,压倒堆栈中的参数都是同一长度的。所以运行时,系统只需知道参数的数目,而不需要知道它们的长度。

 4. 即使不理睬缺省的类型转换,也可以用C语言进行大量的编码工作。


 5. 在理解隐式类型转换这档子事之前,不能称自己是专家级C程序员。隐式类型转换在涉及原型的上下文中显得非常重要。


 6. 函数原型不仅改变了C语言的语法,而且引入了一种微妙的语义区别(不是人们所希望的)。ANSI C中,在被调用函数的函数体内,这些值会根据函数定义时参数的声明类型自动裁剪为该类型。 之所以要把它们裁剪为原来的大小,是为了简化编译器——所有的东西都是同一长度。 在K&R C中,如果传递的是一个float,函数实际接收到的是double。


 7.  ANSI C函数和K&R C函数混搭的话,如果使用一个较窄的类型就会失败!


 8. 调用库函数之后检查errno。它隶属于ANSI C 标准。<errno.h>。


 9. ioctl()(I/O控制)系统调用。它提供一个针对终端特性的良好的控制层。I/O设置为raw状态可以实现阻塞式读入,如果终端没有字符输入,进程就一直等待,直到有自负输入为止。

    curses函数库为它们提供了各种不同的可移植的程序。是一个屏幕管理调用函数库。 <curses.h>.


 10 .在ANSI C中流行的不良方法:调用函数和通过指针调用函数(或任意层次的指针间接引用)可以使用同一种语法。


 11. 有时候,花点时间把编程问题分解成几个部分往往是解决它的最快方法。


 12. 如何在一条语句汇总进行类型转换并调用该函数呢?

   1. 一个对象的声明,它的类型就是想要转换的结果类型。

   2. 删除标识符(以及任何如extern之类的存储限定符),并把剩余的内容放在一对括号里。

   3. 把第二步产生的内容放在需要进行类型转换的对象的左边。


  












原创粉丝点击