在下面的结构定义中,有一行包含宏定义(#define
)。这条线究竟做了什么?我知道它是数组h_addr_list
的第一个条目的别名,但它对我来说仍然很奇怪。 h_addr
是struct hostent
的成员吗?这个定义是否只在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 */
};
我完全理解您的回复。例如,为什么'h_addr'成为'struct hostent'的成员,当它只是一个宏? – pap42
'h_addr'不是'struct hostent'的字段。该定义由预处理器处理,实际的编译器在'#define'处看到空行。但是,如果一段代码被写为'he.h_addr',则预处理器将修改它并将其替换为'he.h_addr_list [0]'。这就是实际的编译器会看到的。 – Mat
您的回复非常好,但我认为您应该对其进行编辑,使其对未来的读者更加清晰(可能包括您刚刚发表的评论?)。 – pap42