考虑以下代码:
size_t s = 100000;
如果在编译它的平台上,int
数据类型是16位宽,size_t
是32位宽,会发生什么? s
变量是否包含值100000?或者100000将被视为一个整数,从而溢出其16位范围,从而导致未定义的行为和未定义的值到s
?
整数文字总是根据其值的大小而具有类型。如果它们是十进制的(基数为10,如在您的示例中),则类型是能够表示值的int
,long
或long long
中的第一个。如果它们是十六进制或八进制,则类型是可以代表该值的int
,unsigned
,long
,unsigned long
,long long
或unsigned long long
中的第一个。
因此,int
和size_t
的相对大小实际上与您的问题中发生的事情无关。只要有一些签名类型可以表示100000(并且C保证存在; long
必须至少具有32位范围),则文字具有正确的值。如果size_t
足够大以表示这一点,则s
中的结果值将为100000.如果size_t
较小,则该值将以SIZE_MAX
+ 1为模。