Что такое портативный метод для определения максимального значения size_t? - PullRequest
71 голосов
/ 13 августа 2010

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

size_t max_size = (size_t)-1;

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

Ответы [ 5 ]

67 голосов
/ 13 августа 2010

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

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

14 голосов
/ 13 августа 2010
#define MAZ_SZ (~(size_t)0)

или SIZE_MAX

4 голосов
/ 07 июля 2015

В качестве альтернативы битовым операциям, предложенным в других ответах, вы можете сделать это в C ++

#include <limits>
size_t maxvalue = std::numeric_limits<size_t>::max()
4 голосов
/ 13 августа 2010

Решение 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;
0 голосов
/ 03 декабря 2016

Если вы предполагаете, что по крайней мере компилятор C ++ 11, тогда SIZE_MAX должен быть доступен для вас:

http://en.cppreference.com/w/c/types/limits

...