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