ReAl (16.07.2009 18:03, просмотров: 201) ответил Vladimir Ljaschko на Спасибо за ссылки. Проблема в том, что состояний около 100 и проследить правильность перечисления по варианту 2 трудно. В варианте 1 свои недостатки, для быстрых процессов в прерываниях может оказаться критично тратить время на дополнительную
По варианту 2 правильность перечисления поддерживается автоматически ("В обеих порядок определяется ТОЛЬКО enum-ом" - т.е. во втором хоть в массиве только указатели на функции, но они в правильном порядке независимо от порядка указания их в исходном тексте), неуказанные указатели обнуляются. Но это требует поддержки возможности, которая есть в стандарте С99, но не во всех компиляторах. Без макросов, для ясности, это выглядит так:
int array[] = {
[5] = 10,
[3] = 2
};эквивалентно
int array[] = { 0, 0, 0, 2, 0, 10 };
Макрос по второму варианту генерирует именно такое
[LEFT] = do_LEFT