为什么<sys types.h =“”>中的uint使用-std = c99?</sys>消失

时间:2013-03-17 21:18:22

标签: c standards c99

// Filename: test.c
#include <sys/types.h>
int main() {
    uint a;
    return 0;
}

上面的代码能够使用gcc和clang编译,标准如gnu89或gnu99。换句话说,以下工作。

$gcc test.c # for the default is std=gnu89
$clang test.c # for the default is std=gnu99

但是,以下内容因错误而失败,&#34;未声明的uint&#34;。

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

有人可以解释为什么uint的定义在c99标准中消失了吗?

2 个答案:

答案 0 :(得分:6)

因为C标准没有定义/要求类型uint。它很可能是编译器,系统或库特定的便利类型。不要使用它。

答案 1 :(得分:1)

内容显示在here中,与uint相关的部分介绍如下:

#ifdef __USE_MISC
/* Old compatibility names for C types.  */
typedef unsigned long int ulong;
typedef unsigned short int ushort;
typedef unsigned int uint;
#endif

这个SO告诉我们这个奇特的宏来自哪里提供了一些基本的解释。

仔细研究表明,SVID也是一个标准,由this支持。 GNU标准,gnu89和gnu99,可能涵盖尽可能多的东西,因此产生的行为表明uint不包含在C99中,但是对于gcc和clang的默认标准是可以理解的。