lvalue требуется как левый операнд присваивания для указателей на функции - PullRequest
0 голосов
/ 17 ноября 2018

Я пытаюсь назначить функцию указателю на функцию, но получаю следующую ошибку:

Значение l требуется в качестве левого операнда присваивания.

Мой код следующий:

#include <stdio.h>
void intr_handler(int param){
    printf("Hey there!\n");
}

int main(){
    void *(intr_handlerptr)(int);
    intr_handlerptr = intr_handler;
}

Я не вижу, в чем здесь проблема, так как я назначаю указателю "intr_handlerptr" функцию "intr_handler", и они имеют одинаковую подпись. Чего мне не хватает?

1 Ответ

0 голосов
/ 17 ноября 2018

Я не уверен в том, что делает void *(intr_handlerptr)(int); (хотя он компилируется, было бы интересно задать еще один вопрос для этого вопроса, который теперь сделан ), но это объявление неверно. Должно быть:

void (*intr_handlerptr)(int);

и ваш код правильно компилируется

учебник по указателям на функции: https://www.cprogramming.com/tutorial/function-pointers.html

РЕДАКТИРОВАТЬ: после обсуждения этой синтаксической ошибки кажется очевидным (сейчас!), Что

void *(intr_handlerptr)(int);

совпадает с:

void *intr_handlerptr(int);

поэтому ждем объявления функции (которая не существует, поэтому она не будет ссылаться, но вы не можете увидеть это, поскольку компилятор выдает ошибку при попытке назначить что-то для нее)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...