Использование оператора break, даже если предыдущая строка приводит к выходу

Сегодня я читал какой-то код (С, если он кому-то помогает), и мне стало любопытно, что такое блок переключателей.

switch (c_type) {
case -1:
    some_function(some_var);
    break;
[...]
default:
    abort();
}

Теперь это совершенно простой блок переключателей. Это some_function(some_var)-вызовите меня: если вы, программист, абсолютно уверены, что вызов приведет к завершению процесса, вы все равно помещаете оператор break, даже если он совершенно не нужен? Вы бы сказали, что это лучшая практика?

4 ответа

Решение

Я бы сказал, что лучшая практика будет иметь взрыв assert() ниже вызова функции. Это служит двойной цели: оно документирует тот факт, что эта точка во время выполнения должна быть недоступна, и выдает сообщение об ошибке, если код каким-то образом достигает этой точки.

Если я супер-супер-супер-уверен в том, что вызов приведет к завершению процесса, я бы вставил утверждение только для этого.

Таким образом, если кто-то изменяет функцию и она не всегда завершается, ошибка будет обнаружена почти при первом появлении.

РЕДАКТИРОВАТЬ: избили, с почти таким же ответом тоже:/

Оставь перерыв там. Неважно, в чем вы уверены: вы пишете свои программы для чтения другими людьми, и разрыв показывает, что данный случай полностью отделен от следующего случая.

Даже если вы можете быть абсолютно уверены в коде сегодня, спецификация может измениться завтра и some_function больше не выйду Ничто в спецификациях не является определенным (по моему опыту в любом случае).

Всегда лучше заканчивать каждое утверждение делом разрывом или возвратом, если только вы не хотите, чтобы оно перешло к следующему.

Другие вопросы по тегам