当前位置: 技术问答>linux和unix
如此使用宏定义第一回见!
来源: 互联网 发布时间:2017-02-23
本文导语: 以下代码来源于linux /include/linux/if.h 或者unix /net/if.h struct ifreq { #define IFHWADDRLEN 6 union { char ifrn_name[IFNAMSIZ]; /* if name, e.g. "en0" */ } ifr_ifrn; unio...
以下代码来源于linux /include/linux/if.h 或者unix /net/if.h
以下为某使用上面结构体的代码
ifr_name就一个宏定义 代表 ifr_ifrn.ifrn_name
难道这里struct ifreq ifr 可以这样用 ifr.ifr_name 这就代表了 ifr.ifr_ifrn.ifrn_name ??!!可以这样用吗? 很神奇呀!
struct ifreq {
#define IFHWADDRLEN 6
union
{
char ifrn_name[IFNAMSIZ]; /* if name, e.g. "en0" */
} ifr_ifrn;
union {
struct sockaddr ifru_addr;
struct sockaddr ifru_dstaddr;
struct sockaddr ifru_broadaddr;
struct sockaddr ifru_netmask;
struct sockaddr ifru_hwaddr;
short ifru_flags;
int ifru_ivalue;
int ifru_mtu;
struct ifmap ifru_map;
char ifru_slave[IFNAMSIZ]; /* Just fits the size */
char ifru_newname[IFNAMSIZ];
void __user * ifru_data;
struct if_settings ifru_settings;
} ifr_ifru;
};
#define ifr_name ifr_ifrn.ifrn_name /* interface name */
以下为某使用上面结构体的代码
struct ifreq ifr;
strncpy(ifr.ifr_name, "eth0", IFNAMSIZ-1);
ifr_name就一个宏定义 代表 ifr_ifrn.ifrn_name
难道这里struct ifreq ifr 可以这样用 ifr.ifr_name 这就代表了 ifr.ifr_ifrn.ifrn_name ??!!可以这样用吗? 很神奇呀!
|
。。。。 C语言基础啊,宏是文本替换,没有程序含义。
|
看不出什么不合理的地方