什么是便携式的方法来findsize_t的最大值?

我想知道我的程序正在运行的系统上size_t的最大值。 我的第一本能是使用负1,就像这样:

size_t max_size = (size_t)-1; 

但我猜测有一个更好的方法,或者是一个常量定义的地方。

清单常量(macros)存在于C99中,称为SIZE_MAX 。 虽然在C89 / 90中没有这样的常量。

但是,您在原始文章中的内容是findsize_t最大值的完美便携方法。 这是保证与任何无符号types的工作。

 #define MAZ_SZ (~(size_t)0) 

SIZE_MAX

作为其他答案中build议的位操作的替代方法,您可以在C ++中执行此操作

 #include <limits> size_t maxvalue = std::numeric_limits<size_t>::max() 

size_t max_size = (size_t)-1; OP提出的解决scheme绝对是迄今为止最好的解决scheme,但是我弄清楚了另外一个更复杂的方法来做到这一点。 我只是为了学术的好奇而发表它。

 #include <limits.h> size_t max_size = ((((size_t)1 << (CHAR_BIT * sizeof(size_t) - 1)) - 1) << 1) + 1; 

如果您至less假设C ++ 11编译器,那么SIZE_MAX应该可用:

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