(原创)严谨的编程风格-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);
结语:
看来,写程序一定要严谨,将一切意外杜绝,使结果牢牢的掌控在自已手中。