У меня такое же впечатление, как этот ответ, что size_t
всегда гарантируется стандартом, чтобы быть достаточно большим, чтобы удерживать максимально возможный тип данной системы.
Однако этот код не скомпилирован в gcc/Mingw:
#include <stdint.h>
#include <stddef.h>
typedef uint8_t array_t [SIZE_MAX];
error: размер массива 'array_t' слишком велик
Я что-то не понимаю в стандарте? Разрешено ли size_t
быть слишком большим для данной реализации? Или это еще одна ошибка в Mingw?
EDIT: дальнейшие исследования показывают, что
typedef uint8_t array_t [SIZE_MAX/2]; // does compile
typedef uint8_t array_t [SIZE_MAX/2+1]; // does not compile
Что происходит, как
#include <limits.h>
typedef uint8_t array_t [LLONG_MAX]; // does compile
typedef uint8_t array_t [LLONG_MAX+(size_t)1]; // does not compile
Итак, теперь я склонен полагать, что это ошибка в Mingw, потому что установка максимально допустимого размера на основе целочисленного типа со знаком не имеет никакого смысла.