为何Qualcomm的hci_qcomm_init工具会出现空if块的写法?
空IF块+ELSE逻辑的写法分析
在阅读高通hci_qcomm_init工具代码时,遇到一段特殊的if语句写法:
if (bt_hci_qcomm_pfal_get_bdaddress((uint8*)(&run_time_params.bd_address[0])) == TRUE) { } else { DEBUGMSG(ZONE_WARNING,TEXT("bt_hci_qcomm_init Failed to read BD Address from NV default to %02X:%02X:%02X:%02X:%02X:%02X"), (int)default_bt_bd_addr[0],(int)default_bt_bd_addr[1],(int)default_bt_bd_addr[2], (int)default_bt_bd_addr[3],(int)default_bt_bd_addr[4],(int)default_bt_bd_addr[5] ); // using default BT address std_memmove((uint8*)(&run_time_params.bd_address[0]), (const uint8 *)(&(default_bt_bd_addr[0])),BT_QSOC_MAX_BD_ADDRESS_SIZE); }
这段代码的if块为空,所有操作都在else分支里,这种写法不一定是代码失误,可能存在这些合理原因:
- 历史代码遗留:原本if块内有执行逻辑,后来因需求变更被移除,但开发人员保留了if-else的结构,避免改动else块的缩进或依赖逻辑,降低误改风险
- 语义可读性:直白表达“成功获取BD地址时无需额外操作,失败才需要执行降级逻辑”的业务意图,团队协作时,其他开发者能快速区分成功/失败分支的行为
- 调试与扩展预留:空if块作为预留,方便后续在成功分支添加日志、调试代码或扩展新逻辑,无需修改条件判断的整体结构
不过这种写法确实不够简洁,更常规的优化写法是直接判断返回值为FALSE,或者对原条件取反,去掉空if块,比如:
if (bt_hci_qcomm_pfal_get_bdaddress((uint8*)(&run_time_params.bd_address[0])) != TRUE) { DEBUGMSG(ZONE_WARNING,TEXT("bt_hci_qcomm_init Failed to read BD Address from NV default to %02X:%02X:%02X:%02X:%02X:%02X"), (int)default_bt_bd_addr[0],(int)default_bt_bd_addr[1],(int)default_bt_bd_addr[2], (int)default_bt_bd_addr[3],(int)default_bt_bd_addr[4],(int)default_bt_bd_addr[5] ); // using default BT address std_memmove((uint8*)(&run_time_params.bd_address[0]), (const uint8 *)(&(default_bt_bd_addr[0])),BT_QSOC_MAX_BD_ADDRESS_SIZE); }
如果是编写新代码,更推荐这种简洁的写法;但如果是维护遗留代码,原写法可能是出于安全或历史兼容性的考量而保留的。
内容的提问来源于stack exchange,提问作者jesusjimsa
相关产品推荐
相关产品推荐

