jcxz, тут я с Вами не согласен. Простейший пример. Имеем таблицу указателей на функции. Пусть у функции один параметр. Причем части функций этот параметр просто не нужен, хотя остальные функции без него обойтись не могут. Получаем два варианта решения:
1. Игнорируем конкретное предупреждение о неиспольуемом значении параметра:
Код: Выделить всё
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-parameter"
...
#pragma GCC diagnostic pop
2. Усложняем алгоритм, разбивая таблицу на две и выполняя поиск нужного обработчика в обоих таблицах.
Пример:
Код: Выделить всё
typedef struct ir_cmd_st {
uint8_t code;
uint8_t (*ir_handler)(uint8_t);
} ir_cmd_t;
static ir_cmd_t ir_cmd_table[] = {
{ IR_NEC_CMD_UP, ir_handler_brightness },
{ IR_NEC_CMD_DOWN, ir_handler_brightness },
{ IR_NEC_CMD_LEFT, ir_handler_pgm_prev},
{ IR_NEC_CMD_RIGHT, ir_handler_pgm_next},
{ IR_NEC_CMD_OK, ir_handler_switch_channel},
{ IR_NEC_CMD_0, ir_handler_pgm_no},
{ IR_NEC_CMD_1, ir_handler_pgm_no},
{ IR_NEC_CMD_2, ir_handler_pgm_no},
{ IR_NEC_CMD_3, ir_handler_pgm_no},
{ IR_NEC_CMD_4, ir_handler_pgm_no},
{ IR_NEC_CMD_5, ir_handler_pgm_no},
{ IR_NEC_CMD_6, ir_handler_pgm_no},
{ IR_NEC_CMD_7, ir_handler_pgm_no},
{ IR_NEC_CMD_8, ir_handler_pgm_no},
{ IR_NEC_CMD_9, ir_handler_pgm_no} };
Здесь обработчками ir_handler_pgm_prev(), ir_handler_pgm_next() и ir_handler_switch_channel() код нажатой кнопки на ИК пульте совершенно не нужен, тогда как обработчиками ir_handler_brightness() и ir_handler_pgm_no() он необходим.