私のプログラムが実行されているシステムのsize_tの最大値を知りたいのですが。私の最初の本能は、次のように負の1を使用することでした。
size_t max_size = (size_t)-1;
しかし、もっと良い方法、またはどこかで定義された定数があると思います。
マニフェスト定数(マクロ)はC99に存在し、SIZE_MAX
と呼ばれます。ただし、C89/90にはそのような定数はありません。
ただし、元の投稿にあるのは、size_t
の最大値を見つける完全に移植可能な方法です。符号なしの型で動作することが保証されています。
#define MAZ_SZ (~(size_t)0)
またはSIZE_MAX
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;
他の回答で提案されているビット操作の代替として、C++でこれを行うことができます
#include <limits>
size_t maxvalue = std::numeric_limits<size_t>::max()
少なくともC++ 11コンパイラを想定している場合は、SIZE_MAXを利用できます。