无法访问 ifreq 结构定义,__USE_MISC 宏未定义

标签 c linux sockets

我正在尝试编译以下单个 C 文件(称为 main.c):

#include <stdio.h>

#define __USE_MISC 1
#include <net/if.h>

int main(int argc, char **argv)
{
ifreq id_ifreq;
fprintf(stdout, ">>>>>> OK <<<<<<\n");
}

...使用“gcc main.c -o main”。我收到以下错误:

main.c: In function ‘main’:
main.c:9:2: error: unknown type name ‘ifreq’

我知道“ifreq”结构定义位于“#ifdef __USE_MISC”宏中,但是,我无法激活该代码块。

我开发了以下代码来检查定义了哪些宏(使用“gcc main.c -o main”编译):

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <net/if.h>

int main(int argc, char **argv)
{

   #ifdef __USE_MISC
       printf("__USE_MISC defined\n");
   #endif
   #ifdef _GNU_SOURCE
       printf("_GNU_SOURCE defined\n");
   #endif

   #ifdef _BSD_SOURCE
       printf("_BSD_SOURCE defined\n");
   #endif

   #ifdef _SVID_SOURCE
       printf("_SVID_SOURCE defined\n");
   #endif

}

结果是除了“_GNU_SOURCE”之外,它们都被定义了。但是,我仍然无法使用“net/if.h”文件中包含的“ifreq”结构的定义。

有人可以帮忙吗?

最佳答案

您省略了 struct 关键字(在 C 中,结构定义不是 typedef)

#include <stdio.h>
#include <net/if.h>

int main(int argc, char **argv)
{
struct ifreq id_ifreq;
fprintf(stdout, ">>>>>> OK <<<<<<\n");
return 0;
}

关于无法访问 ifreq 结构定义,__USE_MISC 宏未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16460437/

相关文章:

c - 打印空星号三角形 c

linux - 在内核源代码树上使用 Flycheck/flymake

node.js - Websocket 失败 无效的帧头

html - socket.io 仅在本地计算机上工作,无法从另一台计算机连接

c - 如何在 C 中交换一行中的两个变量?

c - 读取未知行数

linux - 在linux中获取CLOCK_TICK_RATE值

C Socket sendto 参数无效错误

有人可以详细解释 C 中的链接概念吗

linux - 如何通过扩展名将文件从本地机器复制到 Docker 容器?