Использование оператора break, даже если предыдущая строка приводит к выходу
Сегодня я читал какой-то код (С, если он кому-то помогает), и мне стало любопытно, что такое блок переключателей.
switch (c_type) {
case -1:
some_function(some_var);
break;
[...]
default:
abort();
}
Теперь это совершенно простой блок переключателей. Это some_function(some_var)
-вызовите меня: если вы, программист, абсолютно уверены, что вызов приведет к завершению процесса, вы все равно помещаете оператор break, даже если он совершенно не нужен? Вы бы сказали, что это лучшая практика?
4 ответа
Я бы сказал, что лучшая практика будет иметь взрыв assert()
ниже вызова функции. Это служит двойной цели: оно документирует тот факт, что эта точка во время выполнения должна быть недоступна, и выдает сообщение об ошибке, если код каким-то образом достигает этой точки.
Если я супер-супер-супер-уверен в том, что вызов приведет к завершению процесса, я бы вставил утверждение только для этого.
Таким образом, если кто-то изменяет функцию и она не всегда завершается, ошибка будет обнаружена почти при первом появлении.
РЕДАКТИРОВАТЬ: избили, с почти таким же ответом тоже:/
Оставь перерыв там. Неважно, в чем вы уверены: вы пишете свои программы для чтения другими людьми, и разрыв показывает, что данный случай полностью отделен от следующего случая.
Даже если вы можете быть абсолютно уверены в коде сегодня, спецификация может измениться завтра и some_function
больше не выйду Ничто в спецификациях не является определенным (по моему опыту в любом случае).
Всегда лучше заканчивать каждое утверждение делом разрывом или возвратом, если только вы не хотите, чтобы оно перешло к следующему.