похоже, ваш пример кода недействителен C.
Если я понимаю ваш код, функция m3_funcs()
должна возвращать массив функциональных указателей с нулевым символом в конце. вы на самом деле пытаетесь использовать инициализатор ({...}
) для объявления массива и его немедленного возврата. но я не думаю, что вы можете использовать инициализатор вне объявления переменной ... также обратите внимание, что эта "переменная" будет существовать только в контексте вызова m3_funcs()
, поэтому адрес, который в конечном итоге может быть возвращен, не будет больше быть действительным после того, как функция вернулась.
правильный способ реализовать такую функцию - иметь статическую глобальную переменную и возвращать ее адрес:
static m3_func *m3_funcs_array[] = {(m3_func *)&lolinfo, NULL};
m3_func ** m3_funcs()
{
return &m3_funcs_array;
}