На сайте qnx.org.ru один из участников форума (по-моему, mike) описал как-то одну из ситуаций, когда начинают посещать сомнения в собственной вменяемости, при поиске ошибки в «очевидном» коде, в виде выражения:

«Ну, думал, - ВСЁ! - ДОПРОГРАММИРОВАЛСЯ!...»

Именно такой случай произошёл сегодня со мной. (И – что самое обидное – после обеда в пятницу! :о) )

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

Сравните два фрагмента кода:
## Код:
```
...
//------------------------------------------------------------------------------
   case 2:
      if( KBD_key != KBD_prevKey )
         KBD_state = 0;
      else
         if( KBD_wait-- == 0 )
         {
            switch( KBD_key )
            case KBD_KEY_BRIGHTNESS:
               Display_NextBrightnessLevel();
            break;
            default: 
               KBD_event = KBD_key;
            break;
            KBD_state = 99;
         }
   break;
//------------------------------------------------------------------------------
...
```

и
## Код:
```
...
//------------------------------------------------------------------------------
   case 2:
      if( KBD_key != KBD_prevKey )
         KBD_state = 0;
      else
         if( KBD_wait-- == 0 )
         {
            switch( KBD_key )
           {
            case KBD_KEY_BRIGHTNESS:
               Display_NextBrightnessLevel();
            break;
            default: 
               KBD_event = KBD_key;
            break;
            }
            KBD_state = 99;
         }
   break;
//------------------------------------------------------------------------------
...
```

Не правда ли, отличия – ну прям-таки сразу бросаются в глаза!... :о)

Этот код – часть «драйвера» клавиатуры в разрабатываемом мной устройстве (конечный автомат обработчика клавиатуры). Кусок switch( KBD_key ) был, первоначально, более объёмным. Но, после пересмотра требований и перепроектирования, я его упростил... Как выяснилось – себе на голову... :о) Текст я не набивал, а скопировал из ранней версии исходника. Скопировано было меньше case-частей. Вернее, я удалил в новом тексте, то, что оказалось ненужным... И, при этом, я случайно «грохнул» фигурные скобки в switch-конструкции.

И КОМПИЛЯТОР ЭТО СПОКОЙНЕНЬКО ПРОПУСТИЛ!
КАК – ТАК И НАДО!
БЕЗ ВСЯКИХ НАРЕКАНИЙ!

А я имел чудных несколько часов поисков «глюка»! (Прошу заметить, что отладка встроенных систем «несколько» разнится с отладкой в Дельфи или Визуал-студии... :о)))) )

Код на Си МОЖНО написать ОЧЕНЬ ёмким и кратким. Но, ребяты!, стоит это того времени, и тех нервов на отладке?! ОСОБЕННО в таких спартанских условиях, как в случае встроенных систем?

(Можно, конечно, было и простым if-ом вместо switch-а обойтись, но я знаю, что требования будут меняться – потому и специально вставил «расширяемую» конструкцию... Решил облегчить себе жизнь. :о) )