编译带有std = c99标志的包含“ net / if.h”的文件时发生编译错误

时间:2018-11-11 14:46:01

标签: c gcc clang youcompleteme

这里是描述。

我现在正在编写访问Linux接口的C代码。当我想跟随 一些代码我发现了一些有趣的东西,但是现在我不知道到底发生了什么而感到困惑。

我想获取接口的信息,所以我需要struct ifconf结构来获取信息并使用struct ifreq来显示它。这是背景。

这是测试代码。

#include <linux/if.h>
int main(void){
  struct ifreq request;
  return 0;
}

将其另存为test.c并进行编译。我输入并输出的命令是这样的:

$ gcc test.c
$ gcc -std=c99 test.c

是的,什么都没发生,一切都很好。

但是当我想使用net/if.h时,有趣的事情发生了。

这是测试代码。

#include <net/if.h>
int main(void){
    struct ifreq request;
    return 0;
}

输入和输出是这个。

$ gcc test.c

什么都没发生;但是当我添加std=c99标志时,输出将不同;

$ gcc -sdt=c99 test.c
test.c: In function ‘main’:                                                    
test.c:3:18: error: storage size of ‘request’ isn’t known                      
     struct ifreq request;                                                     
              ^~~~~~~   

我有一个错误,但我不明白。这意味着struct ifreq的定义丢失了,但是已经定义了! 我想弄清楚。

我确定关于包含顺序不存在任何问题,因为我仅包含一个标题。我要解决的原因是我要使用需要标志-std=c99的YouCompleteMe。

使用不带标志的gcc和带标志std的gcc之间有什么区别吗?

我的系统是x86_64 GNU/Linux 4.18.16-arch1-1-ARCH。谢谢!

0 个答案:

没有答案