4
// 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

但是,以下失败并出现错误“未声明的 uint”。

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

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

4

2 回答 2

6

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

于 2013-03-17T21:26:13.523 回答
1

的内容见这里,与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 也是一个标准,并以此为后盾。GNU 标准 gnu89 和 gnu99 可能涵盖了尽可能多的内容,因此 uint 不包括在 C99 中但对于 gcc 和 clang 的默认标准的结果行为是可以理解的。

于 2013-03-21T18:00:47.430 回答