Прототип функции typedef C со структурой, пытающейся ссылаться на ранее определенную. - PullRequest
7 голосов
/ 31 июля 2011

Мне нужно сослаться на структуру, которая еще не определена, потому что структура на самом деле содержит прототип функции typedef.

Например,

typedef int (MyCallbackFunction)(X * x, void * ctx);

typedef struct CallbackData {
  MyCallbackFunction * callback;
  void * ctx;
} CallbackData;

typedef struct X {
  char a;
  int b;
  int c;
  double d;

  CallbackData e;
} X;

Как правильно написать этот код / ​​заголовок?

Ответы [ 3 ]

5 голосов
/ 31 июля 2011

Просто вперёд объявляй свои typedef с

typedef struct X X;
typedef struct CallbackData CallbackData;

, а затем объявите struct с позже.

4 голосов
/ 31 июля 2011

Просто объявите соответствующие типы вперед - и вы можете сделать указатель функции частью typedef:

struct X_;

typedef int (*MyCallbackFunction)(struct X_ * x, void * ctx);

typedef struct CallbackData_ {
  MyCallbackFunction callback;
  void * ctx;
} CallbackData;

typedef struct X_ {
  char a;
  int b;
  int c;
  double d;

  CallbackData e;
} X;
0 голосов
/ 31 июля 2011

Да, вы можете заранее объявить структуру и использовать ее в объявлении MyCallbackFunction, где вам не нужно, чтобы он был полным типом.

struct X;
typedef int (MyCallbackFunction)(struct X * x, void * ctx);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...