地址运营商"&"功能返回

时间:2014-11-03 19:34:14

标签: c gcc avr

此:

bit_is_set(optos(),opt)

扩展宏bit_is_set:

((*(volatile uint8_t *)(((uint16_t) &(optos())))) & (1 << (opt)))

无效,错误消息:lvalue需要作为一元'&amp;'操作数。

但是这个:

uint8_t a=optos();
bit_is_set(a,opt)

工作正常。

为什么?

如何使用地址运算符“&amp;”函数返回?

1 个答案:

答案 0 :(得分:2)

出于同样的原因,为什么这不起作用:

uint8_t optos() {
    return 4;
}

int main(void) {
    uint8_t* addr = &optos();
    return 0;
}
  

错误:左值作为一元'&amp;'操作数

&操作数需要左值才能返回地址。临时右值(在您的情况下,从optos()返回的值)不能获取其地址,并且需要首先绑定到左值。