问题标签 [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 投票
3 回答
46098 浏览

c - 如果我使用 sizeof 和 size_t,我是否应该始终包含 stddef.h

如果我在我的代码中使用sizeof运算符并使用size_t,我是否必须包含stddef.h?我没有包含stddef.h,并且我的代码在使用 MVS2008 和 Borland C++ BuilderX 编译时没有警告。

非常感谢...

0 投票
2 回答
7570 浏览

c++ - 将 size_t 转换为 int 以声明 char 数组的大小

我正在尝试声明 char 数组的大小,我需要使用声明为 size_t 的变量的值来声明该大小。无论如何我可以将 size_t 变量转换为 int 以便我可以做到这一点?

0 投票
5 回答
33870 浏览

c - 找到size_t最大值的可移植方法是什么?

我想知道我的程序正在运行的系统上 size_t 的最大值。我的第一直觉是使用负 1,如下所示:

但我猜有更好的方法,或者在某个地方定义一个常量。

0 投票
2 回答
3128 浏览

c++ - 如何避免 64 位 C++ 版本中 size_t 和 int 类型的问题?

今天我第一次构建了我的项目的 64 位版本。基本上它编译、链接和运行正常,除了抱怨新的 64 位 size_t 类型和简单的 int 类型之间不兼容的警告。这主要发生在我的代码中的这种情况下:

这很容易解决,我读过一篇文章说应该使用 size_t 或 ptrdif_t 作为循环索引。但是在这种情况下我能做些什么呢?

我无法更改外部库的函数声明,它需要一个 int 类型的参数,我需要将向量元素的数量传递给它。除了禁用编译器警告之外,我还能做什么?

0 投票
5 回答
1868 浏览

c++ - 使 size_t 和 wchar_t 可移植?

据我了解, size_t 和 wchar_t 的表示完全是特定于平台/编译器的。例如,我读过 Linux 上的 wchar_t 现在通常是 32 位,但在 Windows 上是 16 位。有什么方法可以在我自己的代码中将它们标准化为设定的大小(int、long 等),同时仍然保持与两个平台上现有标准 C 库和函数的向后可比性?

我的目标本质上是对它们进行 typedef 之类的操作,因此它们是固定大小的。在不破坏某些东西的情况下这可能吗?我应该这样做吗?有没有更好的办法?

更新:我想这样做的原因是我的字符串编码在 Windows 和 Linux 上都是一致的

谢谢!

0 投票
6 回答
7579 浏览

c++ - 使用 size_t 声明最大数组

我想声明一个非常大的数组。我发现数组的最大大小是size_t,定义为UINT_MAX

所以我写了这样的代码

当我编译这个时,它说数组维度溢出

但是当我这样写

它编译正确。有什么不同

0 投票
1 回答
3633 浏览

gcc - 为 size_t 的 printf

有什么方法可以printfsize_t不先强制转换或生成编译器警告的情况下给出?(我总是用 . 编译-Wall。)

0 投票
2 回答
2253 浏览

c - for 循环和 size_t 的奇怪行为

上面的代码(使用 gcc)输出

4

0 1 2 3

此代码(i 初始化为 -1)仅输出 4 并且循环中没有任何内容。

添加演员表使代码再次运行良好。输出是

4

-1 0 1 2 3

第二个代码出了什么问题?为什么 printf 在任何地方都不会出错?

0 投票
2 回答
383 浏览

visual-studio-2008-sp1 - 强制 VS2008 发出类似于“警告:有符号和无符号整数表达式之间的比较”的 GCC 警告

与从 'int' 转换为 'size_t'中描述的内容相同,可能会改变结果的符号 - GCC , C,我想确保我在 GCC 4.2.1 下收到的警告也被标记在 32 位和 64 位编译下的 VS2008 SP1 下,而不是在 GCC 下禁用警告以适应 VS2008。

例如,在 64 位条件下的 GCC 4.2.1 下,我们在 -Wall 条件下看到以下警告:

GCC 警告是:

但它不会被 VS2008 SP1 64 位编译器标记,无论我尝试什么类型的编译指示,无论我使用 /W3 或 /W4,或 /w3 some_warning_number或 /w4 some_warning_number等启用什么。

现在,我不想降低 GCC 的警告级别或禁用警告,因为他们有很好的理由在那里发出警告。所以我希望 VS 构建在启用 /WX 时以类似的方式失败。这是我必须忍受的事情,还是有一些警告可以在 VS2008 上解决问题?

编辑:警告显示为 32 位版本,但不使用 64 位版本,使用相同的编译器选项集,如下所示:

编辑#1:看到这可能是 Visual Studio 的特质,我发布到Visual C++ 开发人员中心 - 警告 C4018: '<' : signed/unsigned mismatch isemitting for 32-bit but not 64-bit compiler under VS2008 SP1 on 64位窗口

编辑#2:我被指示从Visual C++ 开发人员中心发布到 Microsoft Connect ,今天(2011-01-11)微软回复了我的问题并将其验证为编译器问题:他们表示该问题将添加待在未来版本中修复的积压工作:Microsoft Connect - 警告 C4018: '<' : signed/unsigned mismatch is only sent between like-sized types

0 投票
4 回答
3494 浏览

c++ - 与 size_t 比较,返回 int?

我正在写一些来自“如何像 C++ 中的计算机科学家一样思考”的代码示例,这个示例是关于处理扑克牌类型的对象和套牌。我正面临这种情况:

我不能像在文本中那样在 Visual Studio 2010 中的 C++ 中的向量上使用“.length()”,而是必须使用返回(我相信)std::size_type 的 .size()。我想我可以使用 size_t 并摆脱它,以避免在不同架构上出现问题,正如我一直在阅读的那样,但我想知道如果我 return i,但它大于一个整数,我会崩溃程序吗?

[在我的问题中编辑得更具体:]一旦我开始将向量用于比卡片更大的东西,我考虑使用 unsigned int 因为编译器不匹配警告,但我觉得返回 unsigned int 或 int 有一些问题:1) int 不会采用足够大的向量索引。2) 返回 unsigned int 不会让我返回 -1。3) unsigned int 在所有架构上都不等于 size_t (我也在 ARM Cortex-M3 上进行微控制器编程)。

如果我有足够大的向量,我该怎么办?