C típus kereszthivatkozás hogyan?

Fórumok

Egy minimális C webszerverhez a következő kereszthivatkozást tartalmazó adatszerkezetet kellene kialakítanom:


enum method_t { GET, POST };

typedef struct {
    char *url;
    callback_t callback;
    enum method_t method;
} req_t;

struct http_state {
    char *file;
    int left;
    int retries;
    req_t *req;
};

typedef void (*callback_t)(struct http_state *hs);

Jelenleg a data_t rekordban "callback_t callback" helyett "void* callback" van megadva. Így ugyan típuskényszerítéssel működik, de ez azért nem szép.

Hogyan tudom C-ben helyesen definiálni a fenti adatszerkezetet?

Hozzászólások

forward declaration a kulcsszó


typedef struct req req_t;
typedef struct http_state http_state_t;
typedef void (*callback_t)(http_state_t *hs);

struct req {
char *url;
callback_t callback;
enum method_t method;
};

struct http_state {
char *file;
int left;
int retries;
req_t *req;
};

Szóval előbb definiáld a típusokat, aztán a struct-okat

Elejére:


struct http_state;
typedef void (*callback_t)(struct http_state *hs);