当 int 小于 size_t 时分配给 size_t

Assigning to size_t when int is smaller than size_t

考虑这段代码:

size_t s = 100000;

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

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

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