// 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标准中消失了吗?
答案 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的默认标准是可以理解的。