Я хотів би додати - і частково суперечити - попередні відповіді. Хоча, звичайно, звичайно використовувати if-else, якщо таким чином, як комутатор, який повинен охоплювати весь діапазон змінних значень для виразу, жодним чином не гарантується, що будь-який діапазон можливих умов буде повністю охоплений. Те ж саме можна сказати і про саму конструкцію комутатора, отже, вимога використовувати за замовчуванням застереження, яке фіксує всі залишилися значення і може, якщо інше не вимагається в іншому випадку, використовуватиметься як гарантія твердження.
Саме запитання містить хороший зустрічний приклад: друга умова взагалі не стосується х (саме тому я часто віддаю перевагу більш гнучкому варіанту, який базується на комутаторах, ніж варіант на основі комутатора). З прикладу очевидно, що якщо виконується умова A, x слід встановити на певне значення. Якщо A не буде виконано, тоді умова B перевіряється. Якщо вона дотримана, то x має отримати інше значення. Якщо ні А, ні В не виконуються, х має залишатися незмінним.
Тут ми можемо побачити, що для коментування наміру програміста для читача слід використовувати порожню гілку.
З іншого боку, я не можу зрозуміти, чому має бути інше застереження, особливо для останнього та найпотаємнішого, якщо твердження. У С не існує такого поняття, як "інше якщо". Є лише якщо і ще. Натомість, на думку MISRA, конструкцію слід формально відкласти таким чином (і я повинен був поставити відкриваючі фігурні дужки на власні лінії, але мені це не подобається):
if (A) {
// do something
}
else {
if (B) {
// do something else (no pun intended)
}
else {
// don't do anything here
}
}
Коли MISRA просить поставити фігурні дужки навколо кожної гілки, то це суперечить собі, згадуючи "якщо ... інше, якщо будує".
Будь-хто може уявити потворність глибоко вкладених, якщо ще дерев, див . А тепер уявіть, що цю конструкцію можна довільно поширити де завгодно. Тоді запитати про інше застереження врешті-решт, але ніде більше, стає абсурдом.
if (A) {
if (B) {
// do something
}
// you could to something here
}
else {
// or here
if (B) { // or C?
// do something else (no pun intended)
}
else {
// don't do anything here, if you don't want to
}
// what if I wanted to do something here? I need brackets for that.
}
Тож я впевнений, що люди, які розробляли настанови MISRA, мали на увазі, як інакше, якщо це було намір.
Зрештою, це зводиться до того, щоб точно визначити, що означає "якщо ... інакше, якщо сконструювати"