Я не уверен в том, что делает void *(intr_handlerptr)(int);
(хотя он компилируется, было бы интересно задать еще один вопрос для этого вопроса, который теперь сделан ), но это объявление неверно. Должно быть:
void (*intr_handlerptr)(int);
и ваш код правильно компилируется
учебник по указателям на функции: https://www.cprogramming.com/tutorial/function-pointers.html
РЕДАКТИРОВАТЬ: после обсуждения этой синтаксической ошибки кажется очевидным (сейчас!), Что
void *(intr_handlerptr)(int);
совпадает с:
void *intr_handlerptr(int);
поэтому ждем объявления функции (которая не существует, поэтому она не будет ссылаться, но вы не можете увидеть это, поскольку компилятор выдает ошибку при попытке назначить что-то для нее)