我想知道我的程序运行的系统上size_t的最大值。 我的第一直觉是使用负1,如下:
size_t max_size = (size_t)-1;
但我猜测有更好的方法,或者某个地方定义的常数。
答案 0 :(得分:65)
C99中存在一个清单常量(宏),它被称为SIZE_MAX
。但是在C89 / 90中没有这样的常数。
但是,您在原始帖子中所拥有的是一种可以轻松找到size_t
最大值的方法。保证可以使用任何无符号类型。
答案 1 :(得分:14)
#define MAZ_SZ (~(size_t)0)
或SIZE_MAX
答案 2 :(得分:4)
OP建议的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;
答案 3 :(得分:4)
作为其他答案中建议的位操作的替代方法,您可以在C ++中执行此操作
#include <limits>
size_t maxvalue = std::numeric_limits<size_t>::max()
答案 4 :(得分:0)
如果您假设至少使用C ++ 11编译器,则应该可以使用SIZE_MAX: