Как правило, максимально возможное уменьшение объема является хорошей практикой.Если вам нужна какая-то каноническая ссылка на это, то самое близкое, что я могу придумать, это MISRA-C: 2012, правило 8.9, которое рекомендует объявлять объекты, которые используются только одной функцией, в области видимости блока.Я не понимаю, почему то же самое не относится к типам.
Однако не стоит полагаться на провал в операторах switch, поскольку это блокирует статические анализаторы (например, Lint в данном случае) от поискареальные ошибки, вызванные отсутствием break
.Это также затрудняет чтение и сопровождение кода - лично я бы посоветовал использовать сквозные переключатели гораздо хуже, чем повторение кода.
Если вы хотите выполнить несколько состояний для вызова функции, рассмотрите возможность использования простых операторов if
:
if(state == STATE_NEW_REQUEST)
{
...
state = STATE_1;
}
if(state == STATE_1)
{
...
}
В противном случае, если вы выполняете только одно состояние для вызова функции, вы можете использовать switch
.В общем, необходимость «выполнять несколько состояний на состояние» является намеком на то, что можно улучшить дизайн более широкой программы.