Поясните правила 57 и 58 в MISRA C. Почему break, continue — плохо?
Столкнулся со стандартом MISRA C, который гласит:
Rule 57 (required): The continue statement shall not be used.
Rule 58 (required): The break statement shall not be used (except to terminate the cases of switch statement.
Больше ни в каких требованиях к написанию кода я такого не видел. Чем это обусловлено? В самом документе пояснений нет.
Бред из разряда "goto - это плохо". Уж для мелкоконтроллеров goto - очень даже нормально. А в обработке КА и всяких условий просто необходимы break, continue, goto...
Слышал что MISRA C не сколько для кофеварок, сколько для военных и прочих критичных к надежности устройств (всяких там кардиостимуляторов). Может все-таки в таком ПО goto это действительно плохо?
Японский Городовой: Ну, у кого быдлокод, у того таки и падают. Однако, не нужно обобщать. MISRA - это вам, извините, не выдумки досужих ламеров, хотя, кстати, и не стандарт, а правила (изначально) автопрома, адаптированные другими производителями критических систем. И лично я предпочитаю ездить на машинах, в которых они соблюдаются, чем философствовать на тему... чего и всем искренне желаю :)
Единственный разумный ответ, который я увидел - что если в блоке (теле цикла) кто-то захочет написать malloc, а в конце - парный к нему free (или, например, fopen/fclose), и не заметит, что в теле цикла есть break или continue, то могут возникнуть проблемы.
И в стандарте 2004 г. запрет на break ослабили. Запрет на goto и continue оставили.