首页 > 解决方案 > “#define __SIZE_T”和“typedef unsigned int size_t”

问题描述

我现在几次遇到以下“size_t”声明,但真的不知道这是什么意思:

#ifndef __SIZE_T
#define __SIZE_T
typedef unsigned int size_t;
#endif

这里到底发生了什么?#define __SIZE_T 在做什么?仅 typedef 还不足以完成工作吗?

标签: c

解决方案


带有双下划线或一个下划线后跟一个大写字母的标识符和宏是为编译器保留的。所以__SIZE_T很可能是特定编译器内部的东西。(我认为例如 gcc/glibc 内部使用了一个叫做__SIZE_TYPE__.)

#ifndef ... #define只是条件编译(有时称为“编译器开关”,这也是用于编译器参数的术语)。它检查是否 __SIZE_T已经定义。这必须是一个单独的宏,因为您不能对类型进行预处理器检查。如果是一种类型,则类似的东西#ifndef size_t将不起作用。size_t

所以这似乎是编译器size_t对给定编译器和目标的标准类型的内部定义。这不是应用程序程序员需要关心或担心的事情。

通常你会在size_t里面发现stddef.h,同样的事情NULL。但是,标准(7.19 和 7.21)规定也stdio.h应该定义这两个。因此需要宏,以防两者stddef.hstdio.h包含在同一个程序中。


推荐阅读