85

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

size_t max_size = (size_t)-1;

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

4

5 回答 5

76

C99 中存在一个清单常量(宏),它被称为SIZE_MAX. 但是在 C89/90 中没有这样的常数。

但是,您在原始帖子中所拥有的是一种完美可移植的方法来找到size_t. 保证可以使用任何无符号类型。

于 2010-08-12T21:48:56.117 回答
16
#define MAZ_SZ (~(size_t)0)

或者SIZE_MAX

于 2010-08-12T22:19:29.380 回答
9

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

#include <limits>
size_t maxvalue = std::numeric_limits<size_t>::max()
于 2015-07-07T08:53:05.107 回答
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;
于 2010-08-13T02:21:51.763 回答
0

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

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

于 2016-12-03T00:27:25.023 回答