2010-07-28 5 views
1

typedef void (callback) (int * p1, sStruct * p2);recurrent объявить в c

typedef struct _sStruct 
{ 
callback *funct; 
}sStruct; 

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

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

+0

Что такое «повторяющееся объявление»? Вы имеете в виду круговое объявление или самореференцию? – progrmr

ответ

11

Вы можете переадресовать-объявить структуру:

/* 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; 

Edit: Изменено в соответствии изменить вопрос по именам типов.

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

+1

Вы также можете переслать объявление 'typedef' за один раз, например' typedef struct sStruct sStruct; '. И не стесняйтесь указывать структуру и 'typedef' одно и то же имя. –