如何在C中将size_t转换为int?

Tom*_* C. 1 c c99

是否可以安全地将具有类型的变量转换为C99 中的size_t类型int

我很欣赏size_t未签名,但在我们需要int代表的情况下,我们能做什么?

Joh*_*ger 5

是否可以在 C99 中将 size_t 类型的变量安全地转换为 int 类型?

这取决于您所说的“安全”是什么意思。

type 的最大可表示值size_t 通常大于type的最大可表示值int。如果您问是否size_t可以将所有值转换为类型int而不会丢失信息,那么您的实现的答案可能是“否”,并且在可移植性意义上绝对是“否”。

如果您询问是否可以在不实际尝试执行显式转换的情况下检测到某个size_t值对于类型而言太大int,以避免在值超出范围时出现实现定义的结果和可能的信号,并且回到某种优雅的失败,那么答案是“是的”。您可以安全地将相关值与INT_MAX. 将自动应用适当的保值转换,以将<=or>运算符的操作数变为通用类型,并且该操作将产生适当的结果。

我很欣赏 unsigned 中的 size_t,但在我们需要 int 表示的情况下,我们能做什么?

如果您只是询问语法,假设您要转换的值始终可以表示为 type int,那么您可以强制转换 ( int x; x = (int) my_size_t_value;),但实际上在某些上下文中您根本不需要做任何事情。特别是,您可以直接将 a 分配size_tint变量,或将其直接传递给具有int范围内原型的非可变参数函数的参数,在这些情况下,将自动执行适当的转换。