注意!嵌入式C语言易犯错的几个地方

  • 时间:
  • 浏览:0

贤集网嵌入式开发频道讯:在进行单片机开发时,总是也有出現某些很不起眼的什么的什么的问题,哪此什么的什么的问题实在 也有很基础的c语言知识点,是某些小细节。以后 正是以后 很基础,又也有小细节,某些一帮人往往容易忽视它们。结果有以后 一帮人会花很长的时间纠结另另另一个 什么的什么的问题,迟迟找还后能 什么的什么的问题的所在。当发现意味分析竟然是那么的简单和不起眼时,我以后 不单是我,一帮人也有感到痛不欲生。笔者今天又碰到了从前的什么的什么的问题,实在 忍不住了。以后 哪此什么的什么的问题也有小的知识点,考虑到以后 也遇到好多你你你这俩 什么的什么的问题,于是决定每次遇到什么的什么的问题就记录下来,时刻提醒某些人。

1. !和 ~ 不一样

! 是逻辑非符号,~ 是位取反符号。

对IO口某个管脚赋值时何必 错用 !,如

2. <<和>>的优先级低于+、-

比如要实现c=x*2+1,那么加括号会出错

>的优先级低于+、-" width="3001" height="62" title="2. >的优先级低于+、-" align="">

3. 移位要除理溢出

实在 用移位代替乘除法是个不错的法律土辦法 ,笔者很喜欢拿到一段代码后用移位代替乘除法来进行优化。不过有以后 却会出現什么的什么的问题,比如溢出什么的什么的问题。当很明显以后 溢出得话一帮人是会注意的,比如

以后 有就以后 你你这俩 什么的什么的问题是不明显的,比如当移位出現在数组索引或函数参数时,有段用液晶显示字符的代码如下

一帮人还还后能 用左移运算来代替乘法进行优化,如

这本是另另另一个 好法律土辦法 ,以后 事实上后面 的代码是错的。当执行c<<4时,以后 那么明显的赋值过程,一帮人以后 认为没什么的什么的问题,而事实上c的高位以后 丢失了,某些得到错误的结果。另另另一个 可行的做法是先进行强制转换,如

4. 无符号数和有符号数混合运算也有被强制转换为无符号数运算

当另另另一个 有符号数和另另另一个 无符号数进行算术运算时,系统会自动将有符号数强制转换为无符号数再进行运算(即使你使用有符号数强制类型转换),如下面两种生活写法的运输结果是一样的

5. 局部变量要初始化

局部变量那么初始化得话,以后 单片机每次为他分配的是同另另另一个 内存区域,当你在函数中是那么使用局部变量时,就以后 出什么的什么的问题:

以后 第一次调用fun时,a传递的值为0,那么flag = 0x01;执行if(flag&0x01)后面 的代码。以后 再调用fun时,即使a不为0,但flag依然使用以后 的内存区域,某些其值总是为0x01,总是执行的是if后面 的代码,而也有else后面 的。

以后 要除理你你你这俩 错误,平还要养成对局部变量初始化的习惯。

注:文章内的所有配图皆为网络转载图片,侵权即删!