Понадобилось мне сварганить один весьма толстый свитч. На на три десятка позиций. Позиции же идут совершенно равномерно от 0 до 30.
Поглядел я в ассемблерный код и стало тошно -- увидел я там пачку
CPI по одному на каждый вариант. $$@ стыд! Мне на такое убийство компилятором процессорного времени и памяти флеша смотреть больно
Я же как старый ассемблерный боец -- ни такта ни байта врагу.
И подумал можно ли сварганить на Си свитч по таблицам, как на асме родимом.
То есть в памяти у нас лежит таблица адресов переходов, а входное значение - смещение. А дальше хвать его и ускакал по IJMP.
Но получилось только с указателями на функции, но это несколько не то.
Я предпочитаю иметь кейс сишного типа - захотели вышли из ветви через break; не захотели - пошли выполнять следующую ветвь. C функциями тут такое не прокатит. Разве что усложнить конструкцию с анализом возвращаемого значения. Но, блин, мы же бьемся за компактность и скорость, а не за то кто больше нагородит.
Полагаю тут только через метки и GOTO всякие (чую щас полетят тухлые помидоры)
Но вот скормить в таблицу адреса меток не вышло.
Есть ли в Си (в частности в WinAvr) способ сварганить переход по IJMP не прибегая к ассемблерным вставкам, только средствами языка Си?