繁体   English   中英

“#define __SIZE_T”和“typedef unsigned int size_t”

[英]“#define __SIZE_T” and “typedef unsigned int size_t”

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

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

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

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

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

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

通常你会在stddef.h中找到size_tNULL 然而,标准(7.19 和 7.21)规定stdio.h也应该定义这两个。 因此需要宏,以防stddef.hstdio.h都包含在同一个程序中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM