반응형
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를 사용할 수 있습니다.
반응형
'developer tip' 카테고리의 다른 글
variable_scope와 name_scope의 차이점은 무엇입니까? (0) | 2020.10.30 |
---|---|
ConcurrentSkipListMap은 언제 사용해야합니까? (0) | 2020.10.30 |
사용자가 스크롤하고 있는지 감지 (0) | 2020.10.30 |
R에서 두 목록 병합 (0) | 2020.10.29 |
챗봇 개발을위한 튜토리얼이 있습니까? (0) | 2020.10.29 |