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

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

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

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


person manneorama    schedule 06.07.2010    source источник
comment
В значительной степени точная копия stackoverflow.com/questions/3065438/   -  person Bella    schedule 07.07.2010
comment
Ой! Виноват. И я даже заранее искал ответ.   -  person manneorama    schedule 07.07.2010


Ответы (4)


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

person Borealid    schedule 06.07.2010
comment
Я собирался сказать то же самое, что и Марк, но на самом деле это гораздо лучший ответ. - person Brendan Long; 07.07.2010

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

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

person Mark Rushakoff    schedule 06.07.2010

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

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

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

person Anon.    schedule 06.07.2010

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

person jer    schedule 06.07.2010