原创
嵌入式微控制器C语言学习笔记28-《C 专家编程》第8章
第8章 为什么程序员无法分清万圣节和圣诞节 标准的C语言具有八进制、十进制和十六进制常量,但没有二进制常量。
C语言中的类型转换比一般人想象中要广泛的多。在涉及类型小于int或double的表达式中,都有可能出现类型转换。
整型提升就是char、short int和位段类型(无论signed或unsigned)以及枚举类型将被提升为int,前提是int能够完整地容纳原先的数据,否则将被转换为unsigned int。ANSI C表示如果编译器能够保证运算结果一致,也可以省略类型提升。
函数参数传递也会发生隐式类型转换。如果使用了适当的函数原型,类型提升便不会发生,否则也会发生。
在隐式类型转换方面,有两个重要的地方需要注意:
1、隐式类型转换起源于简化最初的编译器的想法,把所有的操作数转换为统一的长度极大地简化了代码的生成。
2、即使不理睬缺省的类型转换,也可以用C语言进行大量的编程工作。
ANSI C建立原型就是为了消除形参和实参之间类型不匹配。然而为了兼容,ANSI C和K&R C两种风格并存。
使用了函数原型,编译器就会假定参数是准确声明的,于是缺省参数提升就不会发生。
如果把函数的定义放在它被调用之前,编译器就会平静地执行正确的操作,因为此时函数的定义就相当于原型。如果把函数的定义放在它被调用之后,编译器就会发出错误信息。
在实际编程中,通过把函数原型放置在头文件中,而函数定义则放置在另一个包含了该头文件的源文件中,编译器能同时发现它们,如有不匹配就能检测到。
有限状态机(FSM)用于有限数量的子程序(状态)的发展变化,每个子程序进行一些处理并选择下一种状态。FSM对于那些基于输入的在几个不同的可选动作中进行循环的程序尤其合适。基本思路是用一张表保存所有可能的状态,并列出进入每个状态时可能执行的所有动作,其中最后一个动作就是计算下一个应该进入的状态。
可调试性编码意味着把系统分成几个部分,先让程序总体结构运行。只有基本的程序能够运行之后,才为那些复杂的细节完善、性能调整和算法优化进行编码。花点时间把编程问题分解成几个部分往往是解决它的最快方法。
强制类型转换既用于“类型转换”,也用于“消除类型歧义”。
复杂类型转换可以按照这个步骤进行:
1、一个对象的声明,它的类型就是想要转换的结果类型;
2、删去标识符(以及任何如extern之类的存储限定符),并把剩余的内容放在一对括号里;
3、把第2步产生的内容放在需要进行类型转换的对象的左边。
文章评论(0条评论)
登录后参与讨论