这里是描述。
我现在正在编写访问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
。谢谢!