黑皮男 发表于 2016-10-10 17:02:54

编程奇葩问题

有如下一段代码,只要把第3行和第四行注释掉,运行到第五行时,wm的值就会被修改。之前已经调用过一次wm=MUI_GetWm(data->parent_id);wm是一个指针,指向一个结构体。

/* 1 */ if(save_flag[(wm->id)]!=1){
/* 2 */      save_flag[(wm->id)]=1;
/* 3 */      temp = wm->context.start_id;
/* 4 */      wm=MUI_GetWm(data->parent_id);
/* 5 */      msg_buf=temp;
/* 6 */      msg_buf=0;
/* 7 */      msg_buf=wm->id;
/* 8 */      msg_buf=DATA_SAVE_FLASH;      
/* 9 */      M_FlashEraseSector(DATA_FLASH_BASE/FLASH_SECTOR_SIZE+wm->context.start_id);
/* 10 */      M_FlashBufferWrite(msg_buf+MSG_HEAD_LENGTH, DATA_FLASH_BASE+wm->context.start_id*FLASH_SECTOR_SIZE, data->len+DATA_PARAMS_SIZE);
/* 11 */ }

黑皮男 发表于 2016-10-12 15:41:26

测了一下,确实,是优化导致的,功能没影响

moyanming2013 发表于 2016-10-10 17:48:59

有可能是编译器优化导致,但不会影响结果。你也可以看下对应的汇编代码核实。

dsjsjf 发表于 2016-10-10 18:13:39

同意楼上的

黑皮男 发表于 2016-10-10 19:59:31

moyanming2013 发表于 2016-10-10 17:48
有可能是编译器优化导致,但不会影响结果。你也可以看下对应的汇编代码核实。 ...

回头我再试试,多谢了

asssdz-382474 发表于 2016-10-10 22:56:28

:):):):):):):):):):):)

zhangdaijin 发表于 2016-10-11 05:42:07

:):):):):):)

zfz9232 发表于 2016-10-11 08:31:29

围观围观

NYD 发表于 2016-10-11 09:00:44

围观:lol:lol:lol

高二毛 发表于 2016-10-11 10:32:57

围观一下,呵呵
页: [1] 2
查看完整版本: 编程奇葩问题