bit_is_set(optos(),opt)
擴大宏觀bit_is_set:
((*(volatile uint8_t *)(((uint16_t) &(optos())))) & (1 << (opt)))
不工作,並顯示錯誤消息:需要左值作爲一元 '&' 操作數。
但這:
uint8_t a=optos();
bit_is_set(a,opt)
工作正常。
爲什麼?
如何使用帶函數返回的地址運算符「&」?
bit_is_set(optos(),opt)
擴大宏觀bit_is_set:
((*(volatile uint8_t *)(((uint16_t) &(optos())))) & (1 << (opt)))
不工作,並顯示錯誤消息:需要左值作爲一元 '&' 操作數。
但這:
uint8_t a=optos();
bit_is_set(a,opt)
工作正常。
爲什麼?
如何使用帶函數返回的地址運算符「&」?
出於同樣的原因,這是行不通的:
uint8_t optos() {
return 4;
}
int main(void) {
uint8_t* addr = &optos();
return 0;
}
error: lvalue required as unary ‘&’ operand
的&
操作需要一個左值返回的地址。一個臨時右值(在你的情況下,從optos()
返回的值)不能得到它的地址,並且需要首先綁定到一個左值。
'optos()'返回一個值,而不是一個對象。值沒有地址。 – pmg 2014-11-03 19:40:55
'&'是*地址*操作符,而不是方向操作符。你可能認爲「方向」與「間接」相反,但這並不常見。 – 2014-11-03 19:48:27
感謝您的澄清。 :-) – chuy 2014-11-03 19:56:06