Использование оператора break, даже если предыдущая строка приводит к выходу - PullRequest
1 голос
/ 07 июля 2010

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

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

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

Ответы [ 4 ]

8 голосов
/ 07 июля 2010

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

2 голосов
/ 07 июля 2010

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

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

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

2 голосов
/ 07 июля 2010

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

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

0 голосов
/ 07 июля 2010

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

...