用C语言在IAR中编写stm32程序,有个别语句不执行

2020-01-22 12:04发布

char exchange(char source)
{
  char high=source<<4;  /*将source右移取高四位,低四位补0赋值给high,*/  
  char low=source>>4;   /*将source右移取高四位,低四位补0赋值给high,*/
  return high+low;     /*两者相加即得经过交换的数,return将其返回给调用函数*/
}


主函数调用如下所示
main
{
char a=0;
a=exchange(0x36);
}
问题:在主函数中执行到 a=exchange(0x36);时,进入子函数后,程序直接跳到 return high+low;而不执行char high=source<<4; char low=source>>4;这两句,这是怎么回事???
我用的是IAR 芯片是stm32107vct7.希望高手给我解答一下
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
zhoujustin108
1楼-- · 2020-01-23 06:42
编译器觉得楼主的两句话没意义,给优化没了...
xhcyfc
2楼-- · 2020-01-23 08:41
一般来说,在软件调试阶段是不开优化的,这样便于跟踪各个中间状态的变化
sdu168_2
3楼-- · 2020-01-23 10:25
xhcyfc 发表于 2014-10-20 16:06
一般来说,在软件调试阶段是不开优化的,这样便于跟踪各个中间状态的变化 ...

对呀,不开便于理解

一周热门 更多>