gpt4 book ai didi

c - 在结构定义中定义宏

转载 作者:太空狗 更新时间:2023-10-29 16:46:12 24 4
gpt4 key购买 nike

在下面结构体的定义上,有一行是宏定义(#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 */
};

最佳答案

宏定义根本没有范围,如果它在该结构之外定义,它将以相同的方式工作。

它允许旧代码继续使用 hr.h_addr 而不必更改为 he.h_addr_list[0](假设 he是一个 struct hostent)。

澄清一下,h_addr 不是struct hostent 的字段。该定义由预处理器处理,实际的编译器#define所在的位置看到一个空行。
但是如果一段代码写成he.h_addr,预处理器会修改它并替换为he.h_addr_list[0]。这就是实际编译器将看到的。

预处理器宏从来没有作用域:编译器本身甚至看不到它们——它只看到替换的结果,而预处理器完全忽略(不知道)作用域。

关于c - 在结构定义中定义宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12247255/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com