developer tip

size_t의 최대 값을 찾는 이식 가능한 방법은 무엇입니까?

copycodes 2020. 10. 30. 08:14
반응형

size_t의 최대 값을 찾는 이식 가능한 방법은 무엇입니까?


내 프로그램이 실행중인 시스템에서 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


다른 답변에서 제안 된 비트 연산의 대안으로 C ++에서이 작업을 수행 할 수 있습니다.

#include <limits>
size_t maxvalue = std::numeric_limits<size_t>::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 ++ 11 컴파일러 이상을 가정하는 경우 SIZE_MAX를 사용할 수 있습니다.

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

참고 URL : https://stackoverflow.com/questions/3472311/what-is-a-portable-method-to-find-the-maximum-value-of-size-t

반응형