当int小于size_t时,分配给size_t

问题描述 投票:2回答:1

考虑以下代码:

size_t s = 100000;

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

c int integer-overflow size-t
1个回答
3
投票

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

因此,intsize_t的相对大小实际上与您的问题中发生的事情无关。只要有一些签名类型可以表示100000(并且C保证存在; long必须至少具有32位范围),则文字具有正确的值。如果size_t足够大以表示这一点,则s中的结果值将为100000.如果size_t较小,则该值将以SIZE_MAX + 1为模。

© www.soinside.com 2019 - 2024. All rights reserved.