1.编译器优化的问题
定义的局部变量如果后续没有用,会被编译器优化掉,如:
{
u32 va = 100;
va = 200;
//些处放断点 ,查看一下va的值,会发现根本不对。
}
如何避免优化?
{
__IO u32 va = 100;
va = 200;
//此处放断点,看一下值已经正常了。
}
__I 、__O 、 __IO的宏定义如下:
2. char类型会被当成unsigned char, 导致计算结果出错
{
char va = -40;
//这里放断点,看一下va的值 如下:
}
这是因为负数变成无符号数时,在内存中是其反码+1
-40 二进制为: 1010 1000
反码为: 1101 0111
补码为: 1101 1000 ——> 216
所以被当成是unsiged char 时会是216,显然会导致计算出错。
如何解决?
{
int8_t va = -40;
//放断点看一下:
}
int8_t定义如下:
就是说申明char类型时,一定要写成signed char 不然会被编译器认为是unsigned char
这点与我们在linux开发中是有区别的。
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』