반응형
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;
OP에 의해 제안된 해결책은 확실히 지금까지는 최고였지만, 나는 이것을 하기 위한 또 다른 복잡한 방법을 알아냈다.단지 학문적인 호기심 때문에 올리는 겁니다.
#include <limits.h>
size_t max_size = ((((size_t)1 << (CHAR_BIT * sizeof(size_t) - 1)) - 1) << 1) + 1;
적어도 C++11 컴파일러를 가정할 경우 SIZE_MAX를 사용할 수 있어야 한다.
반응형
'IT이야기' 카테고리의 다른 글
C에서 인트 크기의 "적어도"를 어떻게 요청해야 하는가? (0) | 2022.05.19 |
---|---|
Vue 2 제공 / 주입 API를 반응적으로 만드는 방법 (0) | 2022.05.19 |
상태가 업데이트되면 데이터가 변경되는 이유는? (0) | 2022.05.19 |
java.sql.timestamp를 LocalDate(java8) java.time으로 변환하는 방법? (0) | 2022.05.18 |
vuejs 2에서 선택 입력 옵션을 동적으로 변경 (0) | 2022.05.18 |