此:
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;”函数返回?
答案 0 :(得分:2)
出于同样的原因,为什么这不起作用:
uint8_t optos() {
return 4;
}
int main(void) {
uint8_t* addr = &optos();
return 0;
}
错误:左值作为一元'&amp;'操作数
&
操作数需要左值才能返回地址。临时右值(在您的情况下,从optos()
返回的值)不能获取其地址,并且需要首先绑定到左值。