如此使用宏定义第一回见!解决思路

如此使用宏定义第一回见!以下代码来源于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语言基础啊,宏是文本替换,没有程序含义。