Нет никаких преимуществ или недостатков с точки зрения производительности. Нет оснований полагать, что версия, содержащая временную переменную результата и break
, будет производить любой другой машинный код.
Однако следует отметить, что это просто очень уродливый способ написания цепочки if
. switch
Fallthrough - невероятно плохая и опасная практика, которую нельзя использовать. Этот код должен быть переписан так, чтобы он был более надежным и читаемым:
if(adv_mode == BLE_ADV_MODE_DIRECTED_HIGH_DUTY && this && that)
{
result = BLE_ADV_MODE_DIRECTED_HIGH_DUTY;
}
else if(...)
{
result = BLE_ADV_MODE_DIRECTED;
}
Или, если константы являются смежными перечислениями от 0 до n , просто замените все это на:
return check(p_advertising)[adv_mode];
где check
- массив указателей на функции, каждый из которых указывает на функцию, содержащую проверки, зависящие от режима. (Это будет связано с накладными расходами при вызове функции, но с гораздо меньшим количеством ответвлений.)