请教傻孩子: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。
如何解决呢? 同时,我也希望“非volatile变量”也能作为函数void PLUS(int *demand_addr)的入口参数。 难道非要编译两个同样的程序,即程序1针对volatile型变量,程序2针对“非volatile变量”
程序1:
void PLUS1(int volatile *demand_addr)
{
(*demand_addr)++;
}
程序2:
void PLUS2(int *demand_addr)
{
(*demand_addr)++;
} 一个void PLUS1(volatile int *demand_addr)就可以,volatile是限定词,限定词只能增加,不能减少(除非强制转换)
另外用ICC的话,volatile应该没什么作用的吧。 加一个强制类型转换吧……如果不行,就用一个临时变量赋值以后再传给函数。 1、就是因为想通过一个函数(入口参数为:指针变量),
2、不同的地方调用(实参为不同的变量的地址),可以修改不同变量的值,
3、因此只能用“入口参数=指针变量”来修改变量值
怎么能用“临时变量”呢? to 【5楼】 ba_wang_mao
对于这种情况,我的操作方式就是但凡用到这个变量的函数一律采用volatile指针。
页:
[1]