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

问题描述

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

我很感激size_t是无符号的,但是在我们需要int表示形式的情况下,我们该怎么办?

解决方法

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

这取决于您“安全”的意思。

类型size_t的最大可表示值 通常大于类型int的最大可表示值。如果您问是否所有size_t值都可以转换为类型int而又不丢失任何信息,那么答案可能是“否”,对于可移植性,在可移植性上肯定是“否”。

如果您要询问是否可以检测到size_t的值对于类型int而言太大而无需实际尝试执行显式转换,从而避免实现定义的结果,并且如果该值超出范围并回落到某种正常的失败,则可能发出信号,那么答案是“是”。您可以安全地将相关值与INT_MAX进行比较。将会自动应用适当的保留值的转换,以将<=>运算符的操作数转换为通用类型,并且该运算将产生适当的结果。

我感谢size_t是无符号的,但是在需要使用 int表示,我们该怎么办?

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