问题标签 [size-t]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
7 回答
61473 浏览

c - size_t 与 uintptr_t

C 标准保证这size_t是一种可以保存任何数组索引的类型。这意味着,从逻辑上讲,size_t应该能够保存任何指针类型。我在谷歌上发现的一些网站上读到这是合法的和/或应该总是有效的:

所以在 C99 中,标准引入了intptr_tanduintptr_t类型,它们是有符号和无符号类型,保证能够保存指针:

size_t那么使用和 和有什么区别uintptr_t?两者都是无符号的,并且都应该能够保存任何指针类型,因此它们在功能上看起来是相同的。除了清晰之外,是否有任何真正令人信服的理由使用uintptr_t(或者更好的是 a void *)而不是 a size_t?在不透明的结构中,字段将仅由内部函数处理,有什么理由不这样做吗?

出于同样的原因,ptrdiff_t一直是一个有符号类型能够保存指针差异,因此能够保存大多数任何指针,那么它与 有何不同intptr_t

不是所有这些类型基本上都服务于相同功能的微不足道的不同版本吗?如果不是,为什么?我不能用其中一个做什么而我不能用另一个做什么?如果是这样,为什么 C99 会在语言中添加两种本质上是多余的类型?

我愿意忽略函数指针,因为它们不适用于当前的问题,但请随意提及它们,因为我偷偷怀疑它们将成为“正确”答案的核心。

0 投票
9 回答
76455 浏览

c++ - 在 C++ 中将代码清理为 printf size_t(或:在 C++ 中与 C99 的 %z 最接近)

我有一些 C++ 代码打印size_t

我希望在 32 位和 64 位架构上编译时不会出现警告。

如果这是 C99,我可以使用printf("%z", a);. 但是 AFAICT%z不存在于任何标准的 C++ 方言中。所以相反,我必须做

这真的很难看。

如果语言中没有size_t内置打印 s 的工具,我想知道是否可以编写一个 printf 包装器或类似的东西,size_t以便在 s 上插入适当的强制转换,以消除虚假的编译器警告,同时仍然保持良好的警告。

有任何想法吗?


编辑澄清我为什么使用 printf:我有一个相对较大的代码库,我正在清理。它使用 printf 包装器来执行诸如“写入警告,将其记录到文件,并可能以错误退出代码”之类的操作。我可能能够收集足够的 C++-foo 来使用 cout 包装器来执行此操作,但我不想更改程序中的每个 warn() 调用只是为了摆脱一些编译器警告。

0 投票
3 回答
2225 浏览

c - 我们可以改变 C 中 size_t 的大小吗?

我们可以改变size_tC语言的大小吗?

0 投票
7 回答
5524 浏览

c - size_t 是可移植的吗?

GCC 4.4.1、C99

我正在使用size_t,并且size_tunsigned int. 但是,这取决于您运行的是 32 位还是 64 位。

我将size_t用来存储缓冲区的大小。

所以我不认为如果跨架构使用这将是非常可移植的。

只是一个问题,size_t在 32 位或 64 位上使用。什么情况会导致最严重的问题?

0 投票
14 回答
126206 浏览

c++ - 何时使用 std::size_t?

我只是想知道我应该使用std::size_tfor 循环和其他东西而不是int?例如:

一般来说,关于何时使用的最佳实践是什么std::size_t

0 投票
3 回答
55611 浏览

c - c 中与平台无关的 size_t 格式说明符?

我想size_t在 C 中打印出一个类型的变量,但它似乎size_t别名为不同架构上的不同变量类型。例如,在一台机器(64 位)上,以下代码不会引发任何警告:

但在我的另一台机器(32 位)上,上面的代码会产生以下警告消息:

警告:格式“%ld”需要类型“long int *”,但参数 3 的类型为“size_t *”

我怀疑这是由于指针大小的差异,所以在我的 64 位机器size_t上别名为long int( "%ld"),而在我的 32 位机器size_t上别名为另一种类型。

是否有专门用于的格式说明符size_t

0 投票
4 回答
397 浏览

c++ - Pimpl 习惯用法:如果实现未知,使用什么 size_type?

我有一个包含元素数组的类,我想给它一个GetSize成员函数。但是我应该给那个函数什么返回类型呢?

我正在使用 pimpl 习惯用法,因此在头文件中不知道实现将使用什么来存储元素。所以我不能只说std::vector<T>::size_type,例如:

0 投票
6 回答
1727 浏览

c++ - size_t 是否仅在 C++ 标准或 C 标准中?

size_t 是否仅在 C++ 标准或 C 标准中?

我在定义 size_t 的“/usr/include”树中找不到 C 标头。

如果它不在 C 标准中,那么 GCC 是否只是在做一些魔术来使事情正常进行?

谢谢,陈兹

0 投票
15 回答
877302 浏览

c - C中的size_t是什么?

我对 C 语言感到困惑size_t。我知道它是由sizeof操作员返回的。但它到底是什么?它是一种数据类型吗?

假设我有一个for循环:

我应该使用int i;orsize_t i;吗?

0 投票
1 回答
6350 浏览

c++ - 为什么从 size_t 转换为 unsigned int 会给我一个警告?

我有代码:

我正在使用 4 的警告级别进行编译,它告诉我当 a是 a时“从size_tto转换unsigned int,可能丢失数据” 。size_ttypedefunsigned int

为什么!?

编辑:

我刚刚解决了我自己的问题。我是 XP 用户,我的编译器正在检查 64 位兼容性。由于size_t依赖于平台,因此对于 64 位,它将是unsigned long long,这与unsigned int.