En la definición de la estructura siguiente, hay una línea con una definición de macro (#define
). ¿Qué hace esa línea exactamente? Entiendo que hace un alias a la primera entrada de la matriz h_addr_list
, pero todavía me parece extraño. ¿Es h_addr
un miembro de la estructura hostent
? ¿Está esta definición solo dentro del alcance de la estructura?definición de macro dentro de la definición de estructura
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 */
};
Entiendo su respuesta solo parcialmente. Por ejemplo, ¿por qué 'h_addr' es un miembro de' struct hostent' cuando solo es una macro? – pap42
'h_addr' no es un campo de' struct hostent'. Esa definición es procesada por el preprocesador, el compilador real ve una línea vacía donde está el '# define'. Pero si un fragmento de código se escribe como 'he.h_addr', el preprocesador lo modificará y lo reemplazará con' he.h_addr_list [0] '. Eso es lo que verá el compilador real. – Mat
Su respuesta es excelente, pero creo que debería editarla para que sea un poco más clara para los lectores en el futuro (tal vez incluyendo el comentario que acaba de hacer). – pap42