Тема: C: Вказівник на функцію. void (*func)()
Знайшов на стековерфлов питання:
"Чому вказівник на функцію працює з будь-якою кількістю зірочок '*' ?"
void function1(void (*func)())
{
(*func)(); // (*func) - сама функція.
func(); // func - вказівник на функцію.
(*&func)(); // = func();
(&*func)(); // = func();
(**&func)(); // = (*func)();
(*&*func)(); // = (*func)();
(&**func)(); // = func();
(**func)(); // = (*func)();
(***func)(); // = (*func)();
(****func)(); // = (*func)();
}
void function2(void (**func)())
{
(*func)(); // ok
//func(); // error
//(*&func)(); // error
//(&*func)(); // error
(**&func)(); // ok
(*&*func)(); // ok
(&**func)(); // ok
(**func)(); // ok
(***func)(); // ok
(****func)(); // ok
}
Я так зрозумів, що будь-який вказівник на функцію при розадресації (*func) автоматично конвертується в той самий вказівник на функцію (func).
А при використанні вказівника як функції (func()), викликається сама функція ((*func)()).
Поправте мене, якщо ляпнув щось не те.
Тепер питання:
Всі ці перетворення вказівників відбуваються на етапі компіляції (сподіваюсь), чи під час виконання програми ?
І для "void (*func)()" як краще викликати функцію ? "(*func)();" чи "func();" ? (мається на увазі, чи не виникнуть в мене проблеми на старих компіляторах, якщо я буду використовувати якусь одну із цих форм).