IAR中打印uint16, 输出数据是32位的

使用IAR环境。

串口打印函数是自己编写的可变参函数,发现打印uint16时,数据打印出0x1111FFFF,多出的1111是内存中后面两个byte数据。 然而打印uint8_t就不会错。

查资料发现C99标准里定义如下:

typedef  unsigned int uint16_t;----------这样32位系统里uint16_t不是4bytes了吗,我以为我找到了答案。。。

结果我把项目里的宏定义修改如下:

typedef uint16_t uint16;  ===》typedef unsigned short uint16;
 

仍不行!!!

直接在调用时强行转换类型:

DEBUG_PRINT("SOE DATA %x, %x,%x,%d, %d\r\n",gu16_Data, sizeof(uint16),sizeof(unsigned int));

输出为: 0x1111FFFF, 2,4

DEBUG_PRINT("SOE DATA %x, %x,%x,%d, %d\r\n",(unsigned short)gu16_Data,sizeof(uint16),sizeof(unsigned int));

输出为: 0xFFFF, 2,4

这是为啥?有没有大神来解析一下啊啊啊啊。。。

确认为一个BUG,全局变量定义是u16,而声明时写成u32