使用编译器优化时的疯狂行为

时间:2016-11-30 09:30:56

标签: compiler-optimization

执行以下代码运行到" !!!"优化编译器时:

'abc ghf ksjwwl'

编译器:IAR Studio C编译器;平台:SAM4C微控制器;中等水平的优化

当然,这已经是一个代码,原来的问题已经解决了。

我无法理解编译器在这里做了什么......

另一方面,这可以按预期工作:

int test()
{
  volatile uint32_t flag = 0; /* volatile doesnt matter */

  flag = 3;
  if (flag == 0 ) 
  {
      return 0; // !!!
  }
  else
  {
      return 1;
  }
}

1 个答案:

答案 0 :(得分:0)

我花了一些时间观察,虽然调试器在“return 0;”的行停止,但函数确实返回1。

我遇到的问题与未初始化的变量(在函数外部)相关,在优化期间不会自动设置为零。

除了调试器中的奇怪行为外,该函数是正确的。不幸的是,这一观察导致了一种误解。