科学网

 找回密码
  注册

tag 标签: 硬件编程

相关帖子

版块 作者 回复/查看 最后发表

没有相关内容

相关日志

3. If else编程习惯
wjwqbit 2010-7-29 23:02
如果你用过 KeilC 编译器,你可能会碰到这样的错误,如下: #define LED1_ON(){PORTB|=0x01;} #define LED2_ON(){PORTB|=0x02;} int value ; value =1; if(value0) LED1_ON(); else LED2_ON(); 单独看 ifelse 语句,似乎没有任何问题。但却无法通过编译,编译提示: errorC141:syntaxerrornear'else' 。分析一下, LED1_ON() 为宏定义,表示遇到 LED1_ON() 的地方就用 {PORTB|=0x01;} 替换。于是 int value ; value =1; if(value0) {PORTB|=0x01;} ; Else {PORTB|=0x02;} ; 注意到了吧,用红色标注的分号 ; 是多余的,上述代码相当于 int value ; value =1; if(value0) {PORTB|=0x01;} ; Else {PORTB|=0x02;} ; 去掉红色 ; 代码编译通过。 分析原因, 宏定义 LED1_ON() 加了括号本意是让它看起来像函数,然后在 C 语言中函数后面一般都要加分号;所以在代码中调用时自然写成 LED1_ON(); 的形式。没想到随意加的分号 ; 却成了罪魁祸首。 为了防止这种错误出现,建议写 ifelse 语句时不管是当行还是多行都要用加大括号 {} ,这样多余的;也不会使程序出错,只是多执行了一行无关的语句;。 #define LED1_ON(){PORTB|=0x01;} #define LED2_ON(){PORTB|=0x02;} int value ; value =1; if(value0) { LED1_ON(); } else { LED2_ON(); } 当然对于单行代码的宏定义还有另外一些编程习惯,比如下面一种也是可取的。这样的好处是读者一看就知道 LED1_ON 是宏定义而不是函数的调用。 #define LED1_ONPORTB|=0x01 #define LED2_ONPORTB|=0x02 int value ; value =1; if(value0) LED1_ON; else LED2_ON;
个人分类: 嵌入式C语言编程常见错误(连载)|3884 次阅读|0 个评论

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-5-28 04:01

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部