Что такое портативный метод, чтобы найти максимальное значение размера 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()
The
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;