问题描述
在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
参数,在这些变量中适当的转换将自动执行。