функция map указывает на определенные числа во время выполнения

#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 это строго одно и то же.