Как передать имя функции по указателю?

Esteriman

✩✩✩✩✩✩✩
4 Июн 2025
46
2
Код такой:
C++:
int fontSwitch;

void setup() { }

void loop() {
    fontSwitch = 1;
    write(0, 5);
    fontSwitch = 2;
    write(1, 6);
}

void write(uint8_t position, uint8_t dig) {
  switch (fontSwitch) {
    case 1:  setDig(position, pos, dig, font1, 5, dotA); break;
    case 2:  setDig(position, pos, dig, font2, 5, dotB); break;
  }
}
void setDig(uint8_t position, uint8_t* p, uint8_t dig, const uint8_t* font, uint8_t byte4Sym, void* fun) {
  for (uint8_t x=0; x<byte4Sym; x++)
    for (uint8_t y=0; y<8; y++) fun(p[position]+x, y, bitRead(font[x+dig*byte4Sym], y));
}

void dotA(uint8_t x, uint8_t y, uint8_t bit=1) {
  
}

void dotB(uint8_t x, uint8_t y, uint8_t bit=1) {
  
}
Это упрощенный код, выкинул все лишнее не относящееся к вопросу.
Хочу передать в функцию setDig указатель на функцию dotA либо dotB. Но при компиляции выходит такое сообщение: error: 'fun' cannot be used as a function.
Подскажите, что я делаю неправильно.

P.S. Нашел что нужно указывать таким образом
void (*fun)()
т.е.
void setDig(uint8_t position, uint8_t* p, uint8_t dig, const uint8_t* font, uint8_t byte4Sym, void (*fun)())

Но теперь новая ошибка: too many arguments to function.
Хотя там тот же самый вызов функции с тем же параметрами.

P.P.S.
Как оказалось надо было скопировать шапку функции. Вот таким образом:
void setDig(uint8_t position, uint8_t* p, uint8_t dig, const uint8_t* font, uint8_t byte4Sym, void (*fun)(uint8_t x, uint8_t y, uint8_t bit=1))
И все заработало. Благодарю всех за участие.
 
Изменено:

Старик Похабыч

★★★★★★★
14 Авг 2019
4,366
1,332
Москва
Зачем тут задавать такие вопросы, когда есть учебники ?
сколько параметров передается в dotA или dotB? А сколько в fun ?

Почитайте про callback функции!