Что портативный метод должен найти максимальным значением size_t?

Я хотел бы знать максимальное значение size_t в системе, которую выполняет моя программа. Мой первый инстинкт должен был использовать отрицательный 1, как так:

size_t max_size = (size_t)-1;

Но я предполагаю, что существует лучший путь или константа, определенная где-нибудь.

71
задан Justicle 12 August 2010 в 21:45
поделиться

3 ответа

Константа манифеста (макрос) существует в C99 и называется SIZE_MAX . Однако в C89 / 90 такой константы нет.

Тем не менее, в вашем исходном сообщении есть совершенно переносимый метод нахождения максимального значения size_t . Гарантированно работает с любым беззнаковым типом.

68
ответ дан 24 November 2019 в 13:07
поделиться
#define MAZ_SZ (~(size_t)0)

или SIZE_MAX

14
ответ дан 24 November 2019 в 13:07
поделиться

Решение 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;
4
ответ дан 24 November 2019 в 13:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: