是否必须使用 typedef 将 size_t 定义为五种标准无符号整数类型之一?

2024-01-10

C11标准写道:

6.2.5 类型,¶4:

有五个标准有符号整数类型,指定为signed char, short int, int, long int, and long long int.

因此,五种标准无符号整数类型将是unsigned char, unsigned short int, unsigned int, unsigned long int, and unsigned long long int.

7.19 通用定义<stddef.h>, ¶1-2:

标题<stddef.h>[...] 声明以下类型。 [...]size_t这是结果的无符号整数类型sizeof操作员

演讲内容为cppreference.com https://en.cppreference.com/w/cpp/types/size_t

typedef /*实现定义*/ size_t;

暗示size_t总是通过 a 定义typedef,以及一些答案这个问题 https://stackoverflow.com/q/2550774/2057969声明/暗示/假设它通过 a 被定义为五种标准无符号整数类型之一(见上文)typedef.

但不能size_t也可以定义为特定宽度整数类型之一(C11 标准,7.20 整数类型<stdint.h>), 例如uint32_t? (顺便问一下,它们叫什么?将它们称为“固定宽度整数类型”。 C11 标准偶尔会使用“扩展整数类型”这一表达方式,尽管我在 7.20 中找不到这方面的显着定义。)Must size_t被定义为使用typedef作为五种标准无符号整数类型之一?或者可以将其定义为特定宽度整数类型之一吗?或者它可以是一个完全独立的类型吗?答案是根据标准中的什么措辞得出的?


Edit:我找到了有关此主题的相关引用(国际标准的基本原理 - 编程语言 - C,修订版 5.10(2003 年 4 月),6.5.3.4sizeof操作员):

的类型sizeof,无论它是什么,都会被发布(在库标题中<stddef.h>) as size_t,因为程序员能够引用此类型很有用。这个要求隐含地限制了size_t成为现有无符号整数类型的同义词。


Edit:列出的整数类型维基百科上的 C 标准中称为“指定宽度整数类型”(我检查了 C99 和 C17 版本)。


有一个这个问题的C++版本 https://stackoverflow.com/q/23749822/2057969在 Stack Overflow 上,但我无法推断出 C 的明确答案。


是否必须使用 typedef 将 size_t 定义为五种标准无符号整数类型之一?

不,C 标准不要求这样做。

… 暗示size_t总是通过 a 定义typedef,…

这是无关紧要的,因为size_t在源代码中的行为类似于类型,并且它如何成为类型并不影响这一点。然而,C 2018 7.19 1 说<stddef.h>声明“以下类型”,其中size_t是一。将其定义为宏不会使其成为类型,因此必须使用以下方式声明它typedef或一些等效的实现扩展。

…一些答案这个问题 https://stackoverflow.com/q/2550774/2057969声明/暗示/假设它通过 a 被定义为五种标准无符号整数类型之一(见上文)typedef.

未引用权威人士且并非由权威人士撰写的声明不具有权威性。

但是 size_t 不能也定义为特定宽度整数类型之一(C11 标准,7.20 整数类型 ),例如 uint32_t 吗?

是的。规格size_t在 C 2018 7.19 中并没有禁止这一点。

顺便问一下,它们叫什么?维基百科将它们称为“固定宽度整数类型”。

C 2018 7.20.1.1 的标题是“精确宽度整数类型”。

C11 标准偶尔会使用“扩展整数类型”这一表达方式,尽管我在 7.20 中找不到这方面的显着定义。

术语“扩展整数类型”在 C 2018 6.2.5 7 中定义为扩展有符号整数类型和扩展无符号整数类型。这些在 6.2.5 4 和 6.2.5 6 中定义。它们只是 C 实现定义的附加整数类型。注释指出,它们将在 7.1.3 中为标识符保留的名称空间部分中具有名称,特别是以下划线和大写字母或另一个下划线开头的名称。例如,__int48_t可以是这样的名字。

Must size_t被定义为使用typedef作为五种标准无符号整数类型之一?或者可以将其定义为特定宽度整数类型之一吗?或者它可以是一个完全独立的类型吗?

标准中的措辞在C 2018 7.19 1中:

标题<stddef.h>定义以下宏并声明以下类型...

和 7.19 2:

size_t

这是 sizeof 运算符结果的无符号整数类型;...

该措辞不构成约束size_t成为标准无符号类型之一,也不是精确宽度整数类型之一,也不是另一种类型,也不禁止它成为任何这些类型。 (它甚至不需要size_t实际上能够表示所有对象大小,因此可以想象a的指定结果sizeof操作可能会超出所代表的范围size_t type.)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否必须使用 typedef 将 size_t 定义为五种标准无符号整数类型之一? 的相关文章

随机推荐

  • 将 VB6 AES Rijndael 分组密码转换为 C# 作者:Phil Fresle

    我正在将经典 asp 应用程序转换为 C 并且希望能够解密 c 中最初在经典 asp 中加密的字符串 经典的asp代码是here http www frez co uk vb6 aspx c 代码是here http www frez co
  • IMvcBuilder AddJsonOptions 在.Net Core 3.0 中去了哪里?

    我刚刚将我的 ASP Web API 项目从 NET Core 2 0 升级到 3 0 我正在使用 services AddMvc AddJsonOptions opts gt opts SerializerSettings Contrac
  • QFlags枚举类型转换突然失败

    我已经在库中运行了这段代码很长一段时间 MyClass MyClass QDialog setWindowFlags Qt CustomizeWindowHint Qt WindowTitleHint 然后 在更改库的各个部分后 我突然收到
  • 一个 Java 主题程序,可以读取一个巨大的 CSV 文件的行

    我有一个巨大的 CSV 文件 包含超过 700K 行 我必须解析该 CSV 文件的行并执行操作 我想到通过使用线程来做到这一点 我首先尝试做的事情很简单 每个线程都应该处理 CSV 文件的唯一行 我只能读取 3000 行 我创建了三个线程
  • 如何使用 ExtJS 更改光标

    我想设置网格的一列 以将光标悬停后更改为指针 我不知道应用样式是否是最佳实践 请告诉我 我就是想不通 这是我的代码 我希望该列能够在鼠标悬停时改变光标 Ext define Ext grid Panel store services xty
  • Java 并集、交集和差集的集合方法[重复]

    这个问题在这里已经有答案了 我编写了一个包含两个不同数字集合的程序 我想知道如何从这两个集合中获得并集 交集和集合差 我知道 BitSet 有方法 但这些方法在这里不起作用 public class Collections public s
  • Anaconda pip 离线安装包括依赖项(tensorflow)

    我想在没有互联网连接的系统上的 anaconda 环境中安装 tensorflow 并且我没有 root 访问权限 即我只想将其安装到本地用户 我已经下载了tensorflow的 whl文件和所需的依赖项 并将它们复制到我要使用的机器上 进
  • 从 infix 更改为 postfix 有什么好处?

    我今天看书了 它引入了从中缀变为后缀的算法 有什么好处 提前致谢 其一 与计算中缀表达式不同 您可以借助堆栈从左到右一次扫描轻松计算后缀表达式 其次 后缀表达式中不需要括号和优先规则等概念
  • 是否可以在 pandas 中使用自定义过滤器功能?

    我可以使用我的辅助函数来确定投篮是否为三指针作为 Pandas 中的过滤函数吗 我的实际功能要复杂得多 但我针对这个问题简化了它 def isThree x y return x y 3 print data isThree data x
  • 如何在iphone中获取gmsmapview的坐标中心

    我正在使用新的 iOS 版 Google 地图 SDK 我可以从 GMSMapView center 获取真实坐标吗 现在它返回一个 CGPoint 的值 但它不是真正的坐标 感谢和问候 Use the projection method
  • 从 Kotlin 隐藏静态 Java 方法

    我们正在将许多 java 静态方法转换为 kotlin 扩展函数 然而 我们需要保留一些 JUST FOR JAVA 的方法 我们希望强制 kotlin 代码使用扩展函数 有没有办法从 kotlin 中隐藏 java 静态方法 您可以使用注
  • Google Apps脚本:复制电子表格非常慢

    我有一个 Web 应用程序 其中脚本连接到电子表格 在脚本中 我从电子表格中查找文件的 ssid 打开该文件 然后复制并重命名它 相关行如下所示 var copy SpreadsheetApp openById ssid copy newN
  • sonarqube 忽略 sonar.junit.reportPaths

    我有一个 gradle 项目 它应用了 sonarqube gradle 插件 版本 2 6 我在我团队的 sonarqube 服务器版本 6 4 版本 25310 上运行它 根据文档 https docs sonarqube org di
  • å 在 xml 文件中是否有效?

    IE 不喜欢在 XML 文件中显示 字符 这是一个 IE 问题还是 和类似的字符确实是无效的 XML 我是否必须创建 xx 所有这些字母的值 Michel 顺便说一句 字符位于 CDATA 标记内 声明是这样的 嗯 似乎无法将 xml 声明
  • 角度 4 中的 html2canvas

    我可以在 Angular 4 中使用 html2canvas 截取屏幕截图 但我需要使用 http post 调用将字符串图像发送到服务器端 成分 import Component OnInit NgZone from angular co
  • 如何覆盖Visual Studio 2017社区的编译命令[重复]

    这个问题在这里已经有答案了 我想用一个简单的 shell 脚本覆盖默认的 Visual Studio C 编译器 我想要的是捕获参数 例如文件名 并创建一些统计信息 但是我想完全覆盖编译过程 也就是说 我想从我的 shell 脚本调用原始编
  • 模拟滚动视图内的拖动

    我正在努力拦截并重新发送发送到滚动视图的手势 我想做的事 杀死滚动视图中的所有手势识别器 我已经做到了这一点 在滚动视图中添加新的手势识别器 我也做到了这一点 使新识别器的行为与旧识别器相同 我还没有做到这一点 我需要帮助才能做到这一点 我
  • Boto - AWS SNS 如何提取主题的 ARN 号

    创建 AWS SNS 主题时 a conn create topic topicname 或获取已创建的主题 a conn get all topics 结果是 u CreateTopicResponse u ResponseMetadat
  • 如何减少 python 导入包的 Visual Studio 代码中的自动完成延迟?

    我正在使用 python 3 7 3 和 Visual Studio 代码 1 33 1 当我导入任何库 如 cv2 或 numpy 并尝试使用它时 自动完成需要 4 5 秒来识别函数 当我使用 print slice 等默认函数时 它们会
  • 是否必须使用 typedef 将 size_t 定义为五种标准无符号整数类型之一?

    C11标准写道 6 2 5 类型 4 有五个标准有符号整数类型 指定为signed char short int int long int and long long int 因此 五种标准无符号整数类型将是unsigned char un