#c #function #mapping
#c #функция #отображение
Вопрос:
У меня есть проблема, над которой я могу даже начать работать, потому что я не понимаю, как это можно сделать.
Итак, у нас есть код
int test_handler() {
printf("Test handler calledn");
return 1;
}
// Test your implementation here
int main()
{
register_irq_handler(30, amp;test_handler);
do_interrupt(29); // no handler registered at this position, should return zero
do_interrupt(30); // calls handler at position 30, expected output: Test handler called
return 0;
}
Мне нужно сделать эти функции register_irq_handler, do_interrupt(29).
Но я понятия не имею, с чего начать, я ищу небольшую помощь, чтобы направить меня в правильном направлении.
Как я сохраняю 30, чтобы указать на эту функцию, когда у нас нет глобальной переменной для хранения этого «соединения», или я что-то упускаю.
Комментарии:
1. Я не понимаю вашего вопроса, но у меня такое чувство, что массив указателей на функции может помочь.
2. хорошо, спасибо, это немного поможет, изучим это
Ответ №1:
Вы не можете сделать это без глобальной переменной (почему наличие глобальной переменной может быть проблемой?).
Вероятно, вам нужно что-то вроде этого:
// array of 30 function pointers (all automatically initialized to NULL upon startup)
static int(*functionpointers[30])();
void register_irq_handler(int no, int(*fp)())
{
functionpointers[no] = fp;
}
int do_interrupt(int no)
{
if (functionpointers[no] != NULL)
{
// is registered (!= NULL) call it
return (*functionpointer[no])();
}
else
{
// not registered, just return 0
return 0;
}
}
Отказ от ответственности
Это не проверенный код без проверки ошибок, просто чтобы дать вам представление.
Комментарии:
1. спасибо за ваше время, но я разобрался с этим, что-то вроде вашего ответа выше, создал глобальные массивы указателей функций, а затем просто написал простой код. только в этой части ‘fp’ я использовал ‘* (amp; fp’, но, как я вижу, это то же самое.
2. Да,
fp
иamp;fp
это строго одно и то же.