什么是便携式的方法来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应该可用: