нет разницы между &function
и function
при передаче в качестве аргумента
однако есть разница между вашими typedefs. Я не знаю официального объяснения, то есть в чем именно разница, но от того, что я помню
typedef void (*name1)(void);
и
typedef void(name2)(void);
отличаются:
name1 - указатель на функцию, которая не принимает никаких параметров и ничего не возвращает
name2 - это функция, которая не принимает никаких параметров и ничего не возвращает
Вы можете проверить это, скомпилировав:
typedef void (*pointer)(void);
typedef void (function)(void);
void foo(void){}
int main()
{
pointer p;
function f;
p = foo; //compiles
p();
f = foo; //does not compile
f();
}
Опять же, я не тот человек, чтобы объяснять точную причину такого поведения, но я верю, что если вы посмотрите на стандарты, вы найдете объяснение где-то там