下面代码中的局部变量btmp是通过对函数调用的赋值声明的。该函数读取寄存器RegX的值。下一行写入另一个寄存器Reg_ADDR,这就是这些代码行的用途。此后的行可能会更新btmp。
由于此函数不返回任何内容,那么最后4行代码有什么意义吗?还是有什么复杂的事情在发生,比如btmp是某种指针?
void SetDeviceAddress( uint8_t address, ENUM_MODE AddressMode)
{
uint8_t btmp = DeviceReadReg( RegX ) & ~0x03;
DeviceWriteReg(Reg_ADDR, address);
if ( AddressMode == MODE0 ) {}
else if( AddressMode == MODE1 ) { btmp |= 0x01; }
else if( AddressMode == MODE2 ) { btmp |= 0x02; }
else if( AddressMode == MODE3 ) { btmp |= 0x03; }
}发布于 2021-02-07 19:51:16
'btmp‘变量是局部变量,因此在函数返回时清除堆栈时,与此相关的任何写入/更改操作都会丢失。此外,这段代码的第一行似乎也是无用的-只要DeviceReadReg()调用没有副作用(如果有,这是非常糟糕的编码实践)。因此,该函数的实际等价物是:
void SetDeviceAddress(uint8_t address, ENUM_MODE AddressMode)
{
DeviceWriteReg(Reg_ADDR, address);
}或者更好:
void SetDeviceAddress(uint8_t address)
{
DeviceWriteReg(Reg_ADDR, address);
}https://stackoverflow.com/questions/66085753
复制相似问题