рекуррентный объявить в c - PullRequest
1 голос
/ 28 июля 2010

typedef void (обратный вызов) (int * p1, sStruct * p2);

typedef struct _sStruct
{
callback *funct;
}sStruct;

У меня есть следующее объявление на языке C. Как я могу скомпилировать это повторяющееся объявление без получения ошибки?

На данный момент я получаю: синтаксическая ошибка перед токеном '*' в первой строке.

1 Ответ

11 голосов
/ 28 июля 2010

Вы можете заранее объявить структуру:

/* Tell the compiler that there will be a struct called _sStruct */
struct _sStruct;

/* Use the full name "struct _sStruct" instead of the typedef'ed name
   "sStruct", since the typedef hasn't occurred yet */
typedef void (callback)(int *p1, struct _sStruct *p2);

/* Now actually define and typedef the structure */
typedef struct _sStruct
{
  callback *funct;
} sStruct;

Редактировать: Обновлено, чтобы соответствовать изменению вопроса типа имен.

Кроме того, я настоятельно рекомендую не указывать структуре идентификатор _sStruct. Глобальные имена, начинающиеся с _, являются зарезервированными, и использование их для собственных идентификаторов может привести к неопределенному поведению.

...