Я пришел к этому вопросу, когда написал один «непреднамеренный» фрагмент кода и скомпилировал его и получил желаемое поведение. Позже я заметил странность изменения и понял, что я использовал полный обратный порядок выполнения typedef указателей функций. Теперь я смущен, если «непреднамеренная» ошибка на самом деле синтаксически правильная.is * обязательно при выполнении typedef указателя функции?
Обычная конвенция:
typedef void* (*_malloc_fail_handler_ptr)(int) __attribute__ ((unused));
_malloc_fail_handler_ptr _malloc_fail_handler = NULL;
Мой "непреднамеренное" Код:
typedef void* (_malloc_fail_handler_ptr)(int) __attribute__ ((unused));
_malloc_fail_handler_ptr* _malloc_fail_handler = NULL;
Да, хотя имя должно быть изменено на _malloc_fail_handler_func или что-то такое, чтобы имя соответствовало тому, что это такое :). (nit picking) – Rob
Это на самом деле довольно полезно, поскольку позволяет явно объявлять функции, реализующие интерфейс, как это делается, например, в 'extern malloc_fail_handler_t implementationor;'. – doynax