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


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

size_t max_size = (size_t)-1;

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

5 64

5 ответов:

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

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

#define MAZ_SZ (~(size_t)0)

или SIZE_MAX

в качестве альтернативы битовым операциям, предложенным в других ответах, вы можете сделать это в 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;

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

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