Sulla definizione della struttura seguente, c'è una riga con una definizione di macro (#define
). Cosa fa esattamente quella linea? Capisco che fa un alias alla prima voce dell'array h_addr_list
, ma a me sembra ancora strano. h_addr
un membro della struct hostent
? Questa definizione è solo nell'ambito della struttura?definizione della macro all'interno della definizione di struct
struct hostent
{
char *h_name; /* official name of host */
char **h_aliases; /* alias list */
int h_addrtype; /* host address type */
int h_length; /* length of address */
char **h_addr_list; /* list of addresses from name server */
#define h_addr h_addr_list[0] /* address, for backward compatiblity */
};
Capisco la tua risposta solo parzialmente. Ad esempio, perché 'h_addr' è un membro di' struct hostent' quando è solo una macro? – pap42
'h_addr' non è un campo di' struct hostent'. Tale definizione viene elaborata dal pre-processore, il compilatore effettivo vede una riga vuota dove è il '# define'. Ma se un pezzo di codice è scritto come 'he.h_addr', il pre-processore lo modificherà e lo sostituirà con' he.h_addr_list [0] '. Questo è ciò che il vero compilatore vedrà. – Mat
La tua risposta è eccellente, ma penso che dovresti modificarlo per renderlo un po 'più chiaro per i futuri lettori (forse includendo il commento che hai appena fatto?). – pap42