首页 > 解决方案 > 在 Switch-Case 构造中使用“return”与“break”有什么好处?

问题描述

我正在研究一个 32 位 MCU 的代码,其中我看到一个 Switch-case 构造,它只在每个 case 中使用“return”而不是通常的“break”语句。这样做有什么好处?

通常所有的 Switch-case 语句都使用 break 来退出。但是,如果使用“return”而不是“break”,它会提供更快的代码或更小的代码,或者以这种方式执行它的其他好处?

switch (adv_mode)
{
    case BLE_ADV_MODE_DIRECTED_HIGH_DUTY:
        if (   (p_advertising->adv_modes_config.ble_adv_directed_high_duty_enabled)
            && (!p_advertising->adv_modes_config.ble_adv_extended_enabled)
            && (peer_addr_is_valid))
        {
            return BLE_ADV_MODE_DIRECTED_HIGH_DUTY;
        }
        // Fallthrough.

    case BLE_ADV_MODE_DIRECTED:
        if ((p_advertising->adv_modes_config.ble_adv_directed_enabled) && peer_addr_is_valid)
        {
            return BLE_ADV_MODE_DIRECTED;
        }
        // Fallthrough.

    case BLE_ADV_MODE_FAST:
        if (p_advertising->adv_modes_config.ble_adv_fast_enabled)
        {
            return BLE_ADV_MODE_FAST;
        }
        // Fallthrough.

    case BLE_ADV_MODE_SLOW:
        if (p_advertising->adv_modes_config.ble_adv_slow_enabled)
        {
            return BLE_ADV_MODE_SLOW;
        }
        // Fallthrough.

    default:
        return BLE_ADV_MODE_IDLE;
}

我希望位'return'和'break'会给出相同的结果。所以这只是程序员使用的偏好。

标签: cembedded

解决方案


return离开所在的函数switch并跳回其调用者。

break只留下switch执行后的下一条语句。

在所示情况下,该函数返回某种模式。如果break已使用此结果的变量,则必须设置并在函数结束时返回。有时开发人员发现这太多了。


推荐阅读