【发布时间】:2016-11-30 09:30:55
【问题描述】:
以下代码的执行运行到“!!!”编译器优化时:
int test()
{
volatile uint32_t flag = 0; /* volatile doesnt matter */
flag = 3;
if (flag == 0 )
{
return 0; // !!!
}
else
{
return 1;
}
}
编译器:IAR Studio C 编译器;平台:SAM4C微控制器;中级优化
当然,这已经是一段代码了,原来的问题已经归结于此。
我无法理解编译器在这里做什么......
另一方面,这按预期工作:
int test()
{
volatile uint32_t flag = 0; /* volatile doesnt matter */
int result = 0;
flag = 3;
if (flag == 0 )
{
result = 0;
}
else
{
result = 1; // !!!
}
return result;
}
【问题讨论】:
-
看起来很神秘,asm里有什么线索吗?