Linux 为什么要在结构体中间用 #define 呢?

2023年 2月 19日 59点热度 0人点赞

如下所示:

struct __wait_queue {
	unsigned int flags;       /* 这个标识符是干啥用? */
#define WQ_FLAG_EXCLUSIVE	0x01   /* 为什么要在结构体中间用 #define 呢? */
	void *private;            /* private 是干啥的? */
	wait_queue_func_t func;   /* 这个函数是干啥用的? */
	struct list_head task_list;
};

 

下面这个从网上摘抄的:

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 */
};

 

 

例如以上结构体:

定义一个变量: struct hostent he;

此deinfe的宏和结构体本身没有任何关系,同定义在结构体外面没任何区别。
但是这样做是使的以前的旧的代码he.h_addr不需要做修改,则可以实现he.h_addr_list[0]的改变。

我猜测放到里面的作用主要是便于代码的查阅,此宏的主要作用是用于此结构体而已。

 

rainbow

这个人很懒,什么都没留下

文章评论