是否必须使用 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 定义为五种标准无符号整数类型之一? 的相关文章

  • 使用 gcc 在 Linux 上运行线程构建块 (Intel TBB)

    我正在尝试为线程构建块构建一些测试 不幸的是 我无法配置 tbb 库 链接器找不到库 tbb 我尝试在 bin 目录中运行脚本 但这没有帮助 我什至尝试将库文件移动到 usr local lib 但这又失败了 任何的意见都将会有帮助 确定您
  • BASIC 中的 C 语言中的 PeekInt、PokeInt、Peek、Poke 等效项

    我想知道该命令的等效项是什么Peek and Poke 基本和其他变体 用 C 语言 类似PeekInt PokeInt 整数 涉及内存条的东西 我知道在 C 语言中有很多方法可以做到这一点 我正在尝试将基本程序移植到 C 语言 这只是使用
  • 在 xaml 中编写嵌套类型时出现设计时错误

    我创建了一个用户控件 它接受枚举类型并将该枚举的值分配给该用户控件中的 ComboBox 控件 很简单 我在数据模板中使用此用户控件 当出现嵌套类型时 问题就来了 我使用这个符号来指定 EnumType x Type myNamespace
  • 如何在 Cassandra 中存储无符号整数?

    我通过 Datastax 驱动程序在 Cassandra 中存储一些数据 并且需要存储无符号 16 位和 32 位整数 对于无符号 16 位整数 我可以轻松地将它们存储为有符号 32 位整数 并根据需要进行转换 然而 对于无符号 64 位整
  • std::list 线程push_back、front、pop_front

    std list 线程安全吗 我假设不是这样 所以我添加了自己的同步机制 我认为我有正确的术语 但我仍然遇到问题 每个函数都由单独的线程调用 Thread1 不能等待 它必须尽可能快 std list
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • free 和 malloc 在 C 中如何工作?

    我试图弄清楚如果我尝试 从中间 释放指针会发生什么 例如 看下面的代码 char ptr char malloc 10 sizeof char for char i 0 i lt 10 i ptr i i 10 ptr ptr ptr pt
  • 结构体的内存大小不同?

    为什么第一种情况不是12 测试环境 最新版本的 gcc 和 clang 64 位 Linux struct desc int parts int nr sizeof desc Output 16 struct desc int parts
  • 如何定义一个可结构化绑定的对象的概念?

    我想定义一个concept可以检测类型是否T can be 结构化绑定 or not template
  • 实例化类时重写虚拟方法

    我有一个带有一些虚函数的类 让我们假设这是其中之一 public class AClassWhatever protected virtual string DoAThingToAString string inputString retu
  • LINQ:使用 INNER JOIN、Group 和 SUM

    我正在尝试使用 LINQ 执行以下 SQL 最接近的是执行交叉联接和总和计算 我知道必须有更好的方法来编写它 所以我向堆栈团队寻求帮助 SELECT T1 Column1 T1 Column2 SUM T3 Column1 AS Amoun
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • 为什么 isnormal() 说一个值是正常的,而实际上不是?

    include
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • 编译时展开 for 循环内的模板参数?

    维基百科 here http en wikipedia org wiki Template metaprogramming Compile time code optimization 给出了 for 循环的编译时展开 我想知道我们是否可以
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现
  • MySQL Connector C/C API - 使用特殊字符进行查询

    我是一个 C 程序 我有一个接受域名参数的函数 void db domains query char name 使用 mysql query 我测试数据库中是否存在域名 如果不是这种情况 我插入新域名 char query 400 spri

随机推荐

  • 将 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