Trên định nghĩa của cấu trúc bên dưới, có một dòng có định nghĩa macro (#define
). Dòng đó làm gì chính xác? Tôi hiểu nó làm cho một bí danh cho mục đầu tiên của mảng h_addr_list
, nhưng nó vẫn có vẻ lạ với tôi. Có phải h_addr
là thành viên của cấu trúc hostent
không? Định nghĩa này chỉ nằm trong phạm vi của cấu trúc?xác định macro bên trong định nghĩa 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 */
};
Tôi hiểu phản hồi của bạn chỉ một phần. Ví dụ, tại sao 'h_addr' sau đó là một thành viên của' struct hostent' khi nó chỉ là một macro? – pap42
'h_addr' không phải là trường' struct hostent'. Định nghĩa đó được xử lý bởi bộ xử lý trước, trình biên dịch thực tế sẽ thấy một dòng trống ở đó '# define' là. Nhưng nếu một đoạn mã được viết là 'he.h_addr', bộ xử lý trước sẽ sửa đổi nó và thay thế nó bằng' he.h_addr_list [0] '. Đó là những gì trình biên dịch thực tế sẽ thấy. – Mat
Câu trả lời của bạn là tuyệt vời, nhưng tôi nghĩ bạn nên chỉnh sửa nó để làm cho nó rõ ràng hơn một chút cho người đọc trong tương lai (có lẽ bao gồm cả bình luận bạn vừa tạo ra). – pap42