У вас три проблемы.
Ваш синтаксис при назначении указателя функции неверен, и вы фактически не определяете экземпляр обратного вызова struct.
Вы хотите сказать:
struct callback cb;
cb.func = readUserInput;
Вы могли бы явно взять адрес функции readUserInput, но это не нужно. Этот синтаксис будет выглядеть так:
struct callback cb;
cb.func = &readUserInput;
В стандарте C пустое имя функции будет оцениваться как адрес функции.
Наконец, ваш обратный вызов имеет неправильную подпись. Он определяется как функция, принимающая неизвестное количество аргументов и ничего не возвращающая.
Ваше объявление в структуре требует указатель на функцию, не принимающую аргументов и ничего не возвращающую.
Определить функцию обратного вызова как:
void readUserInput()
{
}
или исправьте объявление в структуре следующим образом:
struct callback {
void (*func)(void);
int pcount;
enum attr_type type;
void *p[0];
};