3741|9

481

帖子

0

TA的资源

纯净的硅(中级)

 

关于volatile [复制链接]

volatile char tmp = 0;

 

 

  for (tmp = 0; tmp < 4; tmp++)
  {
   
   recbuf[tmp] = resp[tmp + 1];         

        
  }

 

编译时给出如下警告:

Warning[Pa082]: undefined behavior: the order of volatile accesses is undefined in this statement E:\5438A_Test\source\SD.C 1788

 

难道volatile修饰过的变量不能作为数组的下标吗?

此帖出自编程基础论坛

最新回复

Tmp定义为Volatile意味着Tmp随时可能改变,变量每次使用都要从地址Load。recbuf[tmp] = resp[tmp + 1]语句两次使用Tmp,先Load recbuf[tmp] 中的变量值还是resp[tmp + 1]中的是未定义的编译行为(编译器认为会影响最终结果,虽然这里实际不会)。因此编译器提示未定义的变量访问次序。 解决方案 使用一个临时变量转存Tmp的值 volatile char tmp = 0; char ch;   for (tmp = 0; tmp < 4; tmp++)   {    ch = tmp;    recbuf[ch ] = resp[ch + 1];                     }  详情 回复 发表于 2012-3-10 16:43
 

回复
举报

12

帖子

0

TA的资源

一粒金砂(初级)

 
没有问题啊,我试过了
此帖出自编程基础论坛
 
 
 

回复

7729

帖子

57

TA的资源

裸片初长成(中级)

 

回复 楼主 l0700830216 的帖子

两个数组多长的都?
此帖出自编程基础论坛
 
个人签名

强者为尊应让我

 
 

回复

7057

帖子

194

TA的资源

五彩晶圆(高级)

 
volatile类型的变量一般不直接参与运算,因为在运算的过程中该变量就已经改变
此帖出自编程基础论坛
 
 
 

回复

481

帖子

0

TA的资源

纯净的硅(中级)

 

回复 板凳 辛昕 的帖子

左边一个是4,右边一个是5。
哈哈,我觉得你的怀疑是数组越界吧
此帖出自编程基础论坛
 
 
 

回复

481

帖子

0

TA的资源

纯净的硅(中级)

 

回复 沙发 wq925110 的帖子

其中 recbuf是函数传递进来的参数,而resp是在函数内部申请的局部变量
此帖出自编程基础论坛
 
 
 

回复

481

帖子

0

TA的资源

纯净的硅(中级)

 

回复 4楼 常见泽1 的帖子

我觉得volatile修饰的变量是为了防止该变量在使用过程中被意料不到的改变掉,而不是在使用过程中就会变掉
此帖出自编程基础论坛
 
 
 

回复

7729

帖子

57

TA的资源

裸片初长成(中级)

 

回复 5楼 l0700830216 的帖子

我当然果断怀疑数组越界,这丫能闹出天大的乱子
此帖出自编程基础论坛
 
个人签名

强者为尊应让我

 
 

回复

50

帖子

0

TA的资源

一粒金砂(高级)

 

回复 楼主 l0700830216 的帖子

Tmp定义为Volatile意味着Tmp随时可能改变,变量每次使用都要从地址Load。recbuf[tmp] = resp[tmp + 1]语句两次使用Tmp,先Load recbuf[tmp] 中的变量值还是resp[tmp + 1]中的是未定义的编译行为(编译器认为会影响最终结果,虽然这里实际不会)。因此编译器提示未定义的变量访问次序。
解决方案
使用一个临时变量转存Tmp的值

volatile char tmp = 0;
char ch;

  for (tmp = 0; tmp < 4; tmp++)
  {
   ch = tmp;
   recbuf[ch ] = resp[ch + 1];         

        
  }
此帖出自编程基础论坛

赞赏

1

查看全部赞赏

 
 
 

回复

481

帖子

0

TA的资源

纯净的硅(中级)

 

回复 9楼 xg_qing 的帖子

高手啊!分析的很透彻!
非常感谢,就是这个原因了,哈哈。
此帖出自编程基础论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表