即使struct iwreq没有ifr_名称作为成员,我仍在质疑这段代码是如何编译的

我使用structiwreq编写了非常简单的代码。
此外,我预计这将是一个错误。
但它是经过编译的,并能正常工作

我查看了linux/wireless.h,它具有struct iwreq的定义。
而且iwreq没有ifr_名称作为成员

有人能给我一个主意吗?
下面是简单的代码

#包括<标准h>
#包括<stdlib.h>
#包括<字符串.h>
#包括<linux/wireless.h>
内部主(空)
{
char*intf=“eth0”;;
结构iwreq-iwr;
strncpy(iwr.ifr_名称、intf、sizeof(iwr.ifr_名称));
printf(“main:intf=%s,iwr.ifr\u name=%s\n”,intf,iwr.ifr\u name);
返回0;
}

wireless.h包括if.h,在if.h中您可以找到:

#定义ifr_名称ifr_ifrn.ifrn_名称/*接口名称*/

因此,代码被翻译为:

strncpy(iwr.ifr\u ifrn.ifrn\u名称、intf、sizeof(iwr.ifr\u ifrn.ifrn\u名称));

发表评论