Целочисленные литералы всегда имеют тип в соответствии с величиной их значения.Если они десятичные (основание 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.