Domanda

sto cercando di creare un wrapper libdnet per la programmazione D linguaggio. Il problema che ho incontrato non è sapere ciò che il sottolineando tipi per eth_addr_t, ip_addr_t e ip6_addr_t mentre la conversione di addr.h . L'ultimo tipo mistero è sockaddr

E sono anche interesse per il motivo per cui v'è un ciclo Do While che è sempre false.

#define addr_pack(addr, type, bits, data, len) do { \
    (addr)->addr_type = type; \
    (addr)->addr_bits = bits; \
    memmove((addr)->addr_data8, (char *)data, len); \
} while (0)

è richiesto per C per eseguire il codice nella macro?

È stato utile?

Soluzione

Questa è una macro definire per il c preprocessore. Tali barre rovesciate alla fine è perché è proprio tutt'uno definizione che si estende su più righe. Un do while è come un ciclo while, ad eccezione della valutazione viene fatto al termine permettergli di svolgere sempre almeno una volta. In questo caso lo sviluppatore ha utilizzato tale ciclo while come una sorta di hack per permettere il suo codice per essere messo in un proprio ambito di applicazione.

Da eth.h nella stessa directory:

typedef struct eth_addr {
        uint8_t         data[ETH_ADDR_LEN];
} eth_addr_t;

ip.h:

typedef uint32_t        ip_addr_t;

ip6.h:

typedef struct ip6_addr {
        uint8_t         data[IP6_ADDR_LEN];
} ip6_addr_t;

honeyd-1.1.1 / inutilizzato / WINSOCK.H:

/*
 * Structure used by kernel to store most
 * addresses.
 */
struct sockaddr {
        u_short sa_family;              /* address family */
        char    sa_data[14];            /* up to 14 bytes of direct address */
};

Altri suggerimenti

Avete dato un'occhiata a htod ? Si suppone per convertire automaticamente i file .h per d dichiarazioni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top