내 프로그램이 실행중인 시스템에서 size_t의 최대 값을 알고 싶습니다. 나의 첫번째 본능과 같이, 한 음을 사용하는 것이었다 :size_t의 최대 값을 찾는 휴대용 방법은 무엇입니까?
size_t max_size = (size_t)-1;
하지만 더 좋은 방법, 또는 어딘가에 정의 된 상수가있다 같은데요.
내 프로그램이 실행중인 시스템에서 size_t의 최대 값을 알고 싶습니다. 나의 첫번째 본능과 같이, 한 음을 사용하는 것이었다 :size_t의 최대 값을 찾는 휴대용 방법은 무엇입니까?
size_t max_size = (size_t)-1;
하지만 더 좋은 방법, 또는 어딘가에 정의 된 상수가있다 같은데요.
C99에 매니페스트 상수 (매크로)가 있으며 SIZE_MAX
이라고합니다. C89/90에는 그런 상수가 없습니다.
그러나 원래 게시물에있는 내용은 최대 값이 size_t
인 완벽한 휴대 방법입니다. 서명되지 않은 유형으로 작업 할 수 있습니다.
#define MAZ_SZ (~(size_t)0)
또는 SIZE_MAX
영업 제안한 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()
'std :: numeric_limits
@jww 사용할 수있는'max()'의'constexpr' 버전이 있어야합니다 : http://en.cppreference.com/w/cpp/types/numeric_limits/max –
최소한 C++ 11 컴파일러를 가정하는 경우 SIZE_MAX가 사용할 수 있어야 당신 :
그건 아주 현명한 속임수입니다. +1! – Mhmmd
네, 가지고있는 것은 괜찮습니다 (캐스팅은 필요 없습니다). –
호기심에서 왜이 사실을 알고 싶습니까? –