ba_wang_mao 发表于 2009-7-29 11:10:14

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

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。
如何解决呢?

ba_wang_mao 发表于 2009-7-29 11:11:37

同时,我也希望“非volatile变量”也能作为函数void PLUS(int *demand_addr)的入口参数。

ba_wang_mao 发表于 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)++;
     }

yyccaa 发表于 2009-7-29 12:42:26

一个void PLUS1(volatile int *demand_addr)就可以,volatile是限定词,限定词只能增加,不能减少(除非强制转换)
另外用ICC的话,volatile应该没什么作用的吧。

Gorgon_Meducer 发表于 2009-7-29 21:38:13

加一个强制类型转换吧……如果不行,就用一个临时变量赋值以后再传给函数。

ba_wang_mao 发表于 2009-7-30 13:22:24

1、就是因为想通过一个函数(入口参数为:指针变量),
2、不同的地方调用(实参为不同的变量的地址),可以修改不同变量的值,
3、因此只能用“入口参数=指针变量”来修改变量值
 怎么能用“临时变量”呢?

Gorgon_Meducer 发表于 2009-7-30 18:09:00

to 【5楼】 ba_wang_mao
   对于这种情况,我的操作方式就是但凡用到这个变量的函数一律采用volatile指针。
页: [1]
查看完整版本: 请教傻孩子:ICC7.22编译器中volatile变量作为函数指针入口,为什么报错?