Здравствуйте, Уважаемый Alexandr!
Tue Jul 04 2006 13:37, Alexandr Torres wrote to Olga Nonova:
AT>>> работы свитча сравнением/по таблице.
ON>> Во втором случае, по-видимому становилось обязательным требование, ON>> чтобы выражение при switch принимало значения 0,1,2,3...
AT> В стейт-машине, как правило, по другому и не бывает.
Однако, не знаю как в просто С, но в С++ нет никаких ограничений на тип и значения выражения при switch. Именно такая универсальность и вынуждает компилятор реализовать перебор со сранением, что для ембеднутых устройств не есть хорошо.
По поводу "по другому не бывает" о нумерации состояний как 0,1,2..., то в макроассемблере есть чрезвычайно изящное решение с использованием indirect jmp-а, а регистр-указатель принимает значения непосредственно адресов меток перехода. Имена меток и несут в себе название стейтов. При этом не надо никаких таблиц jmp-ов и перекодировок из индексов в физические адреса. Жаль, что ничего подобного в С реализовать похоже нельзя.
Всего Вам Хорошего Ольга