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

How to convert size_t to int in C?

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

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

Is it possible to safely convert a variable with type size_t to type int in C99?

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

类型的最大可表示值size_t 通常大于类型 int 的最大可表示值。如果您询问是否所有 size_t 值都可以转换为类型 int 而不会丢失信息,那么对于您的实现来说答案可能是“否”,而且从可移植性的角度来看肯定是“否”。

如果您询问是否有可能在不实际尝试执行显式转换的情况下检测到 size_t 值对于类型 int 来说太大,以避免 implementation-defined 结果和可能的信号,如果值超出范围并退回到某种优雅的失败,那么答案是“是”。您可以安全地将有问题的值与 INT_MAX 进行比较。将自动应用合适的 value-preserving 转换,将 <=> 运算符的操作数转换为通用类型,并且该操作将产生适当的结果。

I appreciate that size_t in unsigned, but in the case where we need an int representation, what can we do?

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