c - “#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 还不足以完成工作吗?
解决方案
带有双下划线或一个下划线后跟一个大写字母的标识符和宏是为编译器保留的。所以__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.h
都stdio.h
包含在同一个程序中。
推荐阅读
- c# - 在 CefSharp 铬浏览器中的 Javascript onbeforeunload 窗口中本地化文本
- php - 在 PHPWORD 中重复 ListItem 编号
- excel - 内存不足错误Excel替换功能
- javascript - React:编写一个函数作为道具传递
- reactjs - React hooks:API失败导致组件重新渲染
- c - C 中的 else...if 语句是否等于 else { if }?
- python - Pyqt5:如何创建手动可编辑的 QDateEdit 小部件?
- android - 将外部应用程序连接到 Woocommerce 的最佳身份验证方法
- powershell - Powershell:如何在特殊字符后获取单词
- javascript - 检查后从另一个变量赋值