当int小于size_t时分配给size_t

时间:2019-02-23 17:44:32

标签: c int integer-overflow size-t

考虑以下代码:

size_t s = 100000;

如果在编译它的平台上int数据类型为16位宽而size_t为32位宽,会发生什么情况? s变量是否包含值100000?还是将100000视为整数,从而溢出其16位范围,从而导致s的行为不确定和值不确定?

1 个答案:

答案 0 :(得分:3)

整数文字总是根据其值的大小而具有类型。如果它们是十进制数(如您的示例,以10为基数),则类型是intlonglong long中能够表示该值的第一个。如果它们是十六进制或八进制,则类型是intunsignedlongunsigned longlong longunsigned long long中的第一个可以代表值。

因此,intsize_t的相对大小实际上与问题中所发生的无关。只要存在某种可以表示100000的带符号类型(并且C保证存在; long必须具有至少32位范围),则文字具有正确的值。假设size_t足够大以表示此,则s中的结果值为100000。如果size_t较小,则该值将以SIZE_MAX + 1为模减小。 / p>