首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >声明并赋值给函数调用的C变量

声明并赋值给函数调用的C变量
EN

Stack Overflow用户
提问于 2021-02-07 16:04:03
回答 1查看 66关注 0票数 3

下面代码中的局部变量btmp是通过对函数调用的赋值声明的。该函数读取寄存器RegX的值。下一行写入另一个寄存器Reg_ADDR,这就是这些代码行的用途。此后的行可能会更新btmp

由于此函数不返回任何内容,那么最后4行代码有什么意义吗?还是有什么复杂的事情在发生,比如btmp是某种指针?

代码语言:javascript
复制
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; }   
}
EN

回答 1

Stack Overflow用户

发布于 2021-02-07 19:51:16

'btmp‘变量是局部变量,因此在函数返回时清除堆栈时,与此相关的任何写入/更改操作都会丢失。此外,这段代码的第一行似乎也是无用的-只要DeviceReadReg()调用没有副作用(如果有,这是非常糟糕的编码实践)。因此,该函数的实际等价物是:

代码语言:javascript
复制
void SetDeviceAddress(uint8_t address, ENUM_MODE AddressMode)
{   
    DeviceWriteReg(Reg_ADDR, address);
}

或者更好:

代码语言:javascript
复制
void SetDeviceAddress(uint8_t address)
{   
    DeviceWriteReg(Reg_ADDR, address);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66085753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档