DictionaryForumContacts

 sonnetic

link 13.08.2006 6:37 
Subject: drop through IT
из документации по языку С
приводится пример кода с комментарием
{
case 3: /* Не соответствует – здесь case не разрешён*/
}
break; /* здесь требуется break */
case 4:
a = b; /* Не соответствует – не пустой drop through */

что такое drop through?
это что-то типа break, case, и поэтому не должно переводиться?
или это некоторый программистский "жаргонизм", который надо передать нормальными русскими словами?

 Enote

link 13.08.2006 10:21 
переводится
покажите всю эту инструкцию switch в оригинале

 sonnetic

link 13.08.2006 16:40 
если Вы настаиваете...
из оригинала сейчас скопировать не могу
и отступы не сохраняются..

switch (x)
{
uint8_t var; /* не соответствует – dec1 перед первым case */
case 0:
a = b;
break; /* здесь требуется break */
case 1: /* пустые выражение, break не требуется */
case 2:
a = c; /* исполняется, если x — 1 или 2 */
if ( a == b )
{
case 3: /* Не соответствует – здесь case не разрешён*/
}
break; /* здесь требуется break */
case 4:
a = b; /* Не соответствует – не пустой drop through */
case 5:
a = c;
break;
default: /* требуется default clause */
errorflag = 1; /* по возможности не должно быть пустым */
break; /* здесь требуется break, в будущих модификациях
преобразуется в case clause */
}

 Enote

link 13.08.2006 17:09 
всё равно не понимаю, что там не соответствует.
Версия такая: в ветви case 4 отсутствует break, т.е. автоматом будет выполняться и ветвь case 5. Возможно, drop through означает захват "чужих" ветвей

 sonnetic

link 14.08.2006 6:24 
эмм... ситуация такая.
в документе описываются правила написания кода на С (для некоторых систем)
фрагменты кода приводятся только как иллюстрация к правилам
эти фрагменты комментируются только в "отношении" фрагмента к правилу: соответствует такой код правилу или нет.

я всё более склоняюсь к тому, чтобы оставить drop through в данном комментарии просто as is...

 /* a.m. */

link 14.08.2006 8:05 
В этом контексте "drop through" означает переход к исполнению следующей ветви оператора switch, если опущен оператор break. В соответствии с правилами MISRA такая конструкция недопустима (не разрешена), если ветвь не пустая. Иначе говоря, разрешается перечислить подряд несколько меток case, для которых исполняется одна и та же последовательность операторов, но после любой ветви, содержащей исполняемые операторы (т.е. непустой) обязателен оператор break. Поэтому комментарий "Non-compliant: non-null drop through" можно перевести, например, так: "Не разрешается опускать break после непустого оператора".

 

You need to be logged in to post in the forum