C语言 求size_t的最大值的可移植方法是什么?

ecbunoof  于 12个月前  发布在  其他
关注(0)|答案(6)|浏览(119)

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

size_t max_size = (size_t)-1;

字符串
但我猜有更好的方法,或者在某处定义了一个常数。

hec6srdp

hec6srdp1#

在C99中有一个显式常量(宏),它被称为SIZE_MAX。但是在C89/90中没有这样的常量。
然而,你在最初的帖子中所提供的是一个完美的可移植的方法来寻找size_t。它保证可以处理任何无符号类型。

zi8p0yeb

zi8p0yeb2#

#define MAZ_SZ (~(size_t)0)

字符串
SIZE_MAX

rwqw0loc

rwqw0loc3#

作为其他答案中建议的位操作的替代方案,您可以这样做:

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

字符串

vawmfj5a

vawmfj5a4#

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;

字符串

k97glaaz

k97glaaz5#

如果你假设至少有C++11编译器,那么SIZE_MAX应该对你可用:
http://en.cppreference.com/w/c/types/limits

nzk0hqpo

nzk0hqpo6#

而不是:

size_t max_size =  (size_t)-1;

字符串
我会使用:用途:

size_t max_size =  size_t(-1);


更清楚的是,你构造了一个值为-1的size_t,而不是从一个名为“size_t”的假设变量中减去-1:-D

相关问题