什么是便携式方法来查找size_t的最大值?

时间:2010-08-12 21:45:49

标签: c size-t

我想知道我的程序运行的系统上size_t的最大值。 我的第一直觉是使用负1,如下:

size_t max_size = (size_t)-1;

但我猜测有更好的方法,或者某个地方定义的常数。

5 个答案:

答案 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:

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