c -我质疑这段代码是如何编译的,即使struct iwreq没有ifr_name作为成员



我使用struct iwreq编写了非常简单的代码。此外,我预计这将是错误的。但是它被编译并且工作。

我查看了linux/wireless.h,其中有struct iwreq的定义。并且iwreq不ifr_name作为成员。

谁能给我个主意?下面是简单的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <linux/wireless.h>
int main(void)
{
char *intf = "eth0";
struct iwreq iwr;
strncpy(iwr.ifr_name, intf, sizeof(iwr.ifr_name));
printf("main : intf = %s, iwr.ifr_name = %sn", intf, iwr.ifr_name);
return 0;
}

wireless.h中包含if.h,if.h中包含:

#define ifr_name    ifr_ifrn.ifrn_name  /* interface name   */

所以代码被翻译成:

strncpy(iwr.ifr_ifrn.ifrn_name, intf, sizeof(iwr.ifr_ifrn.ifrn_name));

/usr/include/linux/wireless.h包含linux/if.h:

#include <linux/if.h>           /* for IFNAMSIZ and co... */

在/usr/include/linux/if.h中有:

#define ifr_name    ifr_ifrn.ifrn_name  /* interface name   */

最新更新