warning: #68-D: integer conversion resulted in a change of sign

  • 在学习STM32的时候遇到一个很奇怪的warning

  • 乍一看这就是一个很常见的定义变量且赋值的语句,感觉没有什么毛病。但是仔细看这是一个u8类型的变量,并且编译显示整数转换导致了符号的改变。所以问题应该就是变量的类型混淆所造成的。

    咱们深入keil内部去看看u8的本质是什么:

    这样就很明显了,u8–>uint8_t–>unsigned char;

    所以编译出现整数转换导致了符号的改变的问题也就能理解了,因为这个变量类型按理来说是没有符号的,所以如果想要解决这个问题,只用把本例中result的初值改为正数就好。

  • 那为什么同样的东西,设计者要采用这么多名字呢?

  • 其实一方面就是为了程序员在编写代码的时候能最大程度的简化,这对于编程人员是友好的;另一方面是由于产品的不断更新迭代需要,考虑到兼容性不得不这么做。

  • 咱们对于这些也不用特别恐惧,只用记住基本常用的就好。

  • u8 –> unsigned char

    u16 –> unsigned short

    u32 –> unsigned int

    物联沃分享整理
    物联沃-IOTWORD物联网 » warning: #68-D: integer conversion resulted in a change of sign

    发表评论