搜索
bottom↓
回复: 6

请教傻孩子:ICC7.22编译器中volatile变量作为函数指针入口,为什么报错?

[复制链接]

出0入0汤圆

发表于 2009-7-29 11:10:14 | 显示全部楼层 |阅读模式
int volatile demand = 0;
int volatile PS = 0;


void PLUS(int *demand_addr)
{
    (*demand_addr)++;
}

在程序中执行如下调用:
  PLUS(&demand);
  PLUS(&PS);


编译报错信息如下:
type error in argument 1 to `PLUS'; found `pointer to volatile int' expected `pointer to int'


因为我的程序中变量demand,在中断中改变,在主程序中使用。因此必须加上volatile。
如何解决呢?

出0入0汤圆

 楼主| 发表于 2009-7-29 11:11:37 | 显示全部楼层
同时,我也希望“非volatile变量”也能作为函数void PLUS(int *demand_addr)的入口参数。

出0入0汤圆

 楼主| 发表于 2009-7-29 11:13:23 | 显示全部楼层
难道非要编译两个同样的程序,即程序1针对volatile型变量,程序2针对“非volatile变量”

  程序1:
     void PLUS1(int volatile *demand_addr)
     {
          (*demand_addr)++;
     }


  程序2:
     void PLUS2(int *demand_addr)
     {
          (*demand_addr)++;
     }

出0入0汤圆

发表于 2009-7-29 12:42:26 | 显示全部楼层
一个void PLUS1(volatile int *demand_addr)就可以,volatile是限定词,限定词只能增加,不能减少(除非强制转换)
另外用ICC的话,volatile应该没什么作用的吧。

出0入296汤圆

发表于 2009-7-29 21:38:13 | 显示全部楼层
加一个强制类型转换吧……如果不行,就用一个临时变量赋值以后再传给函数。

出0入0汤圆

 楼主| 发表于 2009-7-30 13:22:24 | 显示全部楼层
1、就是因为想通过一个函数(入口参数为:指针变量),
2、不同的地方调用(实参为不同的变量的地址),可以修改不同变量的值,
3、因此只能用“入口参数=指针变量”来修改变量值
 怎么能用“临时变量”呢?

出0入296汤圆

发表于 2009-7-30 18:09:00 | 显示全部楼层
to 【5楼】 ba_wang_mao
     对于这种情况,我的操作方式就是但凡用到这个变量的函数一律采用volatile指针。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-5 00:59

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表