考虑以下代码:
size_t s = 100000;
如果在编译它的平台上int
数据类型为16位宽而size_t
为32位宽,会发生什么情况? s
变量是否包含值100000?还是将100000视为整数,从而溢出其16位范围,从而导致s
的行为不确定和值不确定?
答案 0 :(得分:3)
整数文字总是根据其值的大小而具有类型。如果它们是十进制数(如您的示例,以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为模减小。 / p>