以下の構造体の定義では、マクロ定義(#define
)の行があります。その行は何を正確にしていますか?私はそれが配列h_addr_list
の最初のエントリにエイリアスを作成することを理解しますが、それはまだ私に奇妙に見えます。 h_addr
はhostent
のメンバーですか?この定義は構造体のスコープ内でのみですか?構造体定義のマクロを定義しています
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