gcc不能识别结构体struct ifreq.

轮子学长 2014-09-16 04:41:03
程序已经包含了

#include <net/if.h>

然后再主程序中使用:

        struct ifreq ifVec[MAX_IF];


编译出错:
 error: array type has incomplete element type

...全文
1268 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
mymtom 2014-09-18
  • 打赏
  • 举报
回复 3
编译选项的问题 用 -std=c99 之后要配合 -D_GNU_SOURCE 才能使用<net/if.h>里的函数 当然-D_BSD_SOURCE或者-D_SVID_SOURCE也是可以的 涉及的到的测试宏主要是__USE_MISC 查看<features.h>可以看到 __USE_MISC 的相关部分 #if defined _BSD_SOURCE || defined _SVID_SOURCE # define __USE_MISC 1 #endif /* If _GNU_SOURCE was defined by the user, turn on all the other features. */ #ifdef _GNU_SOURCE # undef _ISOC95_SOURCE # define _ISOC95_SOURCE 1 # undef _ISOC99_SOURCE # define _ISOC99_SOURCE 1 # undef _POSIX_SOURCE # define _POSIX_SOURCE 1 # undef _POSIX_C_SOURCE # define _POSIX_C_SOURCE 200809L # undef _XOPEN_SOURCE # define _XOPEN_SOURCE 700 # undef _XOPEN_SOURCE_EXTENDED # define _XOPEN_SOURCE_EXTENDED 1 # undef _LARGEFILE64_SOURCE # define _LARGEFILE64_SOURCE 1 # undef _BSD_SOURCE # define _BSD_SOURCE 1 # undef _SVID_SOURCE # define _SVID_SOURCE 1 # undef _ATFILE_SOURCE # define _ATFILE_SOURCE 1 #endif /* If nothing (other than _GNU_SOURCE) is defined, define _BSD_SOURCE and _SVID_SOURCE. */ #if (!defined __STRICT_ANSI__ && !defined _ISOC99_SOURCE && \ !defined _POSIX_SOURCE && !defined _POSIX_C_SOURCE && \ !defined _XOPEN_SOURCE && !defined _BSD_SOURCE && !defined _SVID_SOURCE) # define _BSD_SOURCE 1 # define _SVID_SOURCE 1 #endif
Cody2k3 2014-09-17
  • 打赏
  • 举报
回复
试着简单复现楼主的问题: $cat f.c #include <net/if.h> int main(void) { struct ifreq ifVec[1000]; return 0; } $gcc -std=c99 f.c f.c: In function ‘main’: f.c:5:17: error: array type has incomplete element type $gcc f.c 如果和楼主的情况一致,原因就是预编译后你的struct 定义可能完全没有了,对于没有定义的struct 当然是incomplete type了 楼主试试 “gcc -E -std=c99 f.c” 和 “gcc -E f.c" 有何不同就是知道了
zhxianbin 2014-09-16
  • 打赏
  • 举报
回复
是不是局部变量,太大了
轮子学长 2014-09-16
  • 打赏
  • 举报
回复
引用 5 楼 mymtom 的回复:
我试过没有问题啊
用gnu99编译或者C89编译时没问题的,但是我把编译器设置为C99 就报错了, 我在stack overflow上问了下,好像是C99会抱怨什么storage size什么的
mymtom 2014-09-16
  • 打赏
  • 举报
回复
我试过没有问题啊
常书 2014-09-16
  • 打赏
  • 举报
回复
你的意思是struct ifreq ifVec; 这样是可以的?
轮子学长 2014-09-16
  • 打赏
  • 举报
回复
好像是使用C99的问题。。。。求大神解答为什么C99下定义结构体对象会报错。或给个介绍的链接
轮子学长 2014-09-16
  • 打赏
  • 举报
回复
好像是使用C99的问题。。。。求大神解答为什么C99下定义结构体对象会报错。或给个介绍的链接
常书 2014-09-16
  • 打赏
  • 举报
回复
用绝对路径试下

23,215

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧