在进行单片机编程时,咱们经常用Int界说变量。曾经学C言语时,我知道int它表明的位数跟详细的硬件结构有关。不过看了一本书中“慎用int”这节后,我对int又有了更一步的知道。
本来C言语并没有进一步清晰不同硬件渠道下int位宽由硬件渠道决议这一点,然后导致了对int不同的了解。实际上int并没有详细的位宽约束,是由所用硬件渠道(MCU)和编译器一起决议位宽为多少,通常情况下编译器会将int的位宽定为与所用MCU的位宽共同。
文中也举了两个比如阐明由于对int了解的不行深化而犯的过错。一个是由于将int误了解为32位,而编译器和MCU为16位宽。一个产品需求显现开机后的时刻,显现精度为秒。假如依照int为32位的话,界说secondCount为unsigned int的话,这是肯定能满意要求的。但当int被编译器依照16位来处理的话,最大记载的时刻只能差不到18小时,产品用到正常上班时段是正常的。假如开机时刻长的话,好久才关机一次,那么这个产品就会有问题了。别的一个比如是假如开端一款32位MCU做的产品,后来发现一款16位的MCU能够代替,这时要进行代码的移植。但16位MCU编译器以为int为16位,这是就存在溢出的问题。假如把int替换为long,可能把其他的当地也改动过错。
其实有处理的方法,C言语它本身供给了更为准确的数据类型。char,short,long long 别离严厉对应8位,16位,32位,64位。绝大多数编译器编译出来的成果都满意这种对应联系。
最终,文中给出一个主张,用C言语编程的时分,一定要慎重运用int,最好是不必。
参阅《删繁就简——单片机入门到通晓》