Linux 为什么C99会抱怨存储大小?
这是我在Linux上编译的一些代码:Linux 为什么C99会抱怨存储大小?,linux,gcc,network-programming,c99,gnu99,Linux,Gcc,Network Programming,C99,Gnu99,这是我在Linux上编译的一些代码: #include <net/if.h> int main() { struct ifreq ifr; } C99有什么不同之处,它不喜欢Linux中的struct ifreq的定义?这是预处理和GNU C与C99的一系列结果 首先,net/if.h: net/if.h包括功能.h 稍后,它在#ifdef_uuuuse_umisc块中定义struct ifreq 因此: 什么是\u USE\u MISC这是BSD和SystemV的共同点 在
#include <net/if.h>
int main() {
struct ifreq ifr;
}
C99有什么不同之处,它不喜欢Linux中的
struct ifreq
的定义?这是预处理和GNU C与C99的一系列结果
首先,net/if.h
:
net/if.h
包括功能.h
#ifdef_uuuuse_umisc
块中定义struct ifreq
\u USE\u MISC
这是BSD和SystemV的共同点features.h
features.h
:
--std=c99
时,默认情况下,GCC定义了\uuuu STRICT\uu ANSI\uuuuu
(因为这就是c99)features.h
时,当\uuuuu STRICT\u ANSI\uuuu
打开时,BSD和System V功能不会启动。i、 e.\u USE\u MISC
未定义net/if.h
:struct ifreq
在预处理后甚至不存在因此,有关存储容量的投诉
您可以通过以下操作了解整个故事:
vimdiff <(cpp test.c --std=c99 -dD) <(cpp test.c --std=gnu99 -dD)
vimdiff我相信我的问题是重复的:谢谢你的解释。我只是偶然发现了完全相同的问题。有没有办法用--std=c99
成功编译这样的代码?@michas Yes。您可以在C源代码中定义\u BSD\u源代码
或\u SVID\u源代码
。
vimdiff <(cpp test.c --std=c99 -dD) <(cpp test.c --std=gnu99 -dD)