А в чем разница междуЧто означает void * (* void) (void *)?
void*(*void)(void*)
и
void*(*voi)(void*)
и когда его использовать?
А в чем разница междуЧто означает void * (* void) (void *)?
void*(*void)(void*)
и
void*(*voi)(void*)
и когда его использовать?
нуль void*(void)(void)
не скомпилирован, так как он пытается объявить функцию, которая возвращает void * named void, и вы не можете использовать ключевые слова языка в качестве имен.
Вы также не можете объявить int named void (int void=5;
не работает).
В настоящее время voi
является действительным идентификатором, и вы можете назвать функцию voi
.
Попытка получить то, что вы на самом деле задаете разницу между ними.
void(*name)(void);
и void(name)(void);
- это то, что один объявляет функцию, а другой объявляет указатель на функцию.
На самом деле скобки на втором примере ничего не делают. void(name)(void);
- это то же самое, что и void name(void);
.
Однако при объявлении указателей функций требуются скобки, или *
свяжет слева с возвращаемым типом.
В любом случае, я не уверен, что именно вы спрашиваете, поэтому вам лучше всего искать на сайте другие вопросы, касающиеся указателей на функции. Например, this one, что также объясняет, почему использование void(name)(void)
может отличаться от void(name)()
.
Я не вижу разницы, кроме опечатки (voi) –
У вас нет опечатки: 'voi' вместо 'void'? – arainone
well 'void * (void) (void)' не компилируется, потому что он пытается объявить функцию, которая возвращает 'void *' named 'void', и вы не можете использовать ключевые слова этого языка в качестве имен. – PeterT