Я хотел бы знать максимальное значение size_t в системе, которую выполняет моя программа. Мой первый инстинкт должен был использовать отрицательный 1, как так:
size_t max_size = (size_t)-1;
Но я предполагаю, что существует лучший путь или константа, определенная где-нибудь.
Константа манифеста (макрос) существует в C99 и называется SIZE_MAX
. Однако в C89 / 90 такой константы нет.
Тем не менее, в вашем исходном сообщении есть совершенно переносимый метод нахождения максимального значения size_t
. Гарантированно работает с любым беззнаковым типом.
Решение size_t max_size = (size_t)-1;
, предложенное ОП, определенно лучшее на данный момент, но я нашел другой, более запутанный способ сделать это. Я выкладываю его просто ради академического любопытства.
#include <limits.h>
size_t max_size = ((((size_t)1 << (CHAR_BIT * sizeof(size_t) - 1)) - 1) << 1) + 1;