(原创)严谨的编程风格-C语言不可忽略的强制类型转换(严谨、C、类型转换)

引言:

  程序中的一个BUG测试了N久,后来发现原来是强制类型转换用错了,奇怪,之前一直都是这么用的,为什么会出错呢。

正文:

  直接上代码吧:

device_par_sta->time = (unsigned short)(uart_rev_buf[6])+(unsigned short)(uart_rev_buf[7]<<8);

  大家看出问题来了吗?之前在KEIL、IAR上都是这么写的,编译出来没有问题,可换到arm-linux-gcc上编译问题就出来了,在debug时发现,强制类型转换的时候,它并不是在高位填0,而是填1,所以导致结果出了错。

     后来换成这样,BUG消除了

device_par_sta->time = (unsigned short)(uart_rev_buf[6]&0xff)+(unsigned short)((uart_rev_buf[7]<<8)&0xff00);

结语:

  看来,写程序一定要严谨,将一切意外杜绝,使结果牢牢的掌控在自已手中。

posted on 2012-03-28 10:08  liu_xf  阅读(1073)  评论(0编辑  收藏  举报

导航