在下面的結構定義中,有一行包含宏定義(#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