Предположим, у нас есть указатель функции на структуру, у которой сама структура является первым аргументом, типичный сценарий обратного вызова.
typedef void (*callback_type)(my_struct_type *mst, int whatever);
typedef struct {
// lots of fun stuff
callback_type notify_me;
} my_struct_type;
Это приводит к ошибке компилятора в первом typedef
, так какможно ожидать.error: unknown type name my_struct_type
.Обращение определений приводит к тому же результату, но неизвестный тип - callback_type
.
. Простое решение состоит в следующем:
typedef struct my_struct_type_S {
// lots of fun stuff
void (*notify_me)(my_struct_type_S *mst, int whatever);
} my_struct_type;
Однако при этом исключается тип указателя на функциюопределение, к которому было бы полезно иметь возможность легко ссылаться позже, и использовать для статических проверок типов, хороших сообщений об ошибках и т. д.
Есть предложения о том, как решить эту проблему?
Правитьon «возможный дубликат»: этот сценарий включает указатель на функцию typedefs
, который загадочен для многих людей.Я думаю, что это хороший пример для этого случая, и, кроме того, принятый ответ очень чистый, ясный и простой.