如此使用宏定义第一回见!以下代码来源于linux /include/linux/if.h或者unix /net/if.hC/C++ codestruct if
如此使用宏定义第一回见!
以下代码来源于linux /include/linux/if.h 或者unix /net/if.h
- C/C++ code
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 */以下为某使用上面结构体的代码
- C/C++ code
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语言基础啊,宏是文本替换,没有程序含义。
