source

size_t의 정의는 어디서 찾을 수 있습니까?

itover 2023. 1. 25. 08:32
반응형

size_t의 정의는 어디서 찾을 수 있습니까?

이 유형으로 정의된 변수는 있지만 어디서 왔는지, 목적이 무엇인지 알 수 없습니다.왜 int 또는 unsigned int를 사용하지 않습니까? (다른 "유사한" 유형은 어떻습니까?Void_t 등)

Wikipedia에서

stdlib.h ★★★★★★★★★★★★★★★★★」stddef.h에서는, 「데이터 타입을 합니다.」라고 하는 이 정의되어 있습니다.size_t개체의 크기를 나타내기 위해 사용되는 1입니다.사이즈가 필요한 라이브러리 함수는 같은 유형이어야 합니다.size_t연산자 사이즈는 다음과 같이 평가됩니다.size_t.

「」의 실제 타입.size_t인 실수는 '실수'라고 가정하는 입니다.★★★★★★★★★★★★★★★★★★★·size_t는 unsigned int와 동일하며 이는 프로그래밍 오류를 일으킬 수 있습니다.2 특히 64비트아키텍처가 보급됨에 따라 더욱 그렇습니다.

C99 7.17.1/2부터

헤더에는 되어 있습니다.stddef.h

<blocks>

size_t

size of 연산자 결과의 부호 없는 정수형입니다.

en.cppreference.com의 size_t 설명에 따라 주세요. size_t 다음의 되어 있습니다.

std::size_t

...    

Defined in header <cstddef>         
Defined in header <cstdio>      
Defined in header <cstring>         
Defined in header <ctime>       
Defined in header <cwchar>

size_t연산자 7.17 입니다.

sizeof연산자는 피연산자의 크기(바이트 단위)를 나타냅니다.이것은 표현식 또는 괄호 안의 형식의 이름입니다.크기는 오퍼랜드의 유형에 따라 결정됩니다.결과는 정수입니다.그정수형)은 「」, 「」( 「」)입니다.size_tISO C99 § 6.5.3.4).

IEEE 에서는 IEEE 규격 1003.1-2017(POSIX.1)이 지정되어 .size_tsys/types.h, 「」, ISO C는 「」를 stddef.h C에서는 ISO C++라고 std::size_t 헤더에 되어 있습니다.cstddef.

으로 말하면 제로 pract pract pract pract pract pract pract pract practsize_t에, 행선지 지정할 수 있는 바이트수를 나타냅니다.지난 10-15년 동안 대부분의 현대 건축에서 32비트였던 것은 부호 없는 int 크기였습니다., 64비트 어드레싱으로 하고 있습니다.uint(c++ 규격에서는 사이즈는 보증되지 않습니다). 간에 할 수 있도록 , 「메모리 사이즈」를 사용할 가 있습니다.size_t 배열 같은 를, 레, 음, 레, 어, 음, 음, 음, 음 등을 사용해야 합니다size_t. s::size()한다.size_t.

또한 Visual Studio에는 "64비트 이식성 문제 검출"이라고 하는 이러한 유형의 오류를 확인할 수 있는 컴파일 옵션이 있습니다.

이렇게 하면 특정 유형이 크기 전용이므로 크기가 무엇인지 항상 알 수 있습니다.가 될 수 있다는 을 알 수 있다: 될 수 있다: 그것은 문제가 될 수 있다.int ★★★unsigned int 매그니튜드(,, 그, 는(?))는short,int,long / 등? / / ??

특정 타입이 할당되어 있기 때문에 길이나 서명에 대해 걱정할 필요가 없습니다.

실제 정의는 C++ 레퍼런스 라이브러리에서 확인할 수 있습니다.이 라이브러리는 다음과 같습니다.

★★★★★size_t 않은 부호되지 않은 적분형')

: 글리: :<cstring>

size_t 연산자가 합니다.sizeof라고 하는 것은, 을 참조해 주세요.<cstring>헤더 파일(특히)을 부호 없는 적분 유형으로 지정합니다.

»<cstring>nummemchr,memcmp,memcpy,memmove,memset,strncat,strncmp,strncpy ★★★★★★★★★★★★★★★★★」strxfrm모든 경우 함수가 영향을 미치는 최대 바이트 수 또는 문자 수를 지정하기 위해 사용됩니다.

, 됩니다.strcspn,strlen,strspn ★★★★★★★★★★★★★★★★★」strxfrm크기와 길이를 반환합니다.

size_t는 표준 라이브러리의 헤더에 정의되어 있어야 합니다.내 경험상, 그것은 보통 단순히 typedef to unsigned int일 뿐이다.하지만 요점은 그럴 필요가 없다는 것이다.표준 라이브러리 벤더는 size_t와 같은 유형을 사용하여 플랫폼에 적합한 경우 기본 데이터 유형을 자유롭게 변경할 수 있습니다.size_t가 (캐스팅 등을 통해) 항상 서명되지 않은 int라고 가정할 경우, 벤더가 size_t를 64비트 타입으로 변경하면 미래에 문제가 발생할 수 있습니다.이러한 이유로 이 라이브러리 또는 다른 라이브러리 유형에 대해 어떠한 추정도 하는 것은 위험합니다.

는 잘잘에 잘 void_t구글 검색 결과(AT&T Research의 Kiem-Phong Vo가 라이브러리에서 사용하고 있음)를 제외하고, 다른 라이브러리에서도 사용하고 있을 것입니다.

다양한 xx_t typedef는 특정 특정 구현에서 유형을 추출하는 데 사용됩니다.이는 특정 구현에 사용되는 구체적인 유형이 플랫폼마다 다를 수 있기 때문입니다.예를 들어 다음과 같습니다.

  • size_t는 개체 크기를 유지하는 데 사용되는 유형을 추상화합니다. 일부 시스템에서는 32비트 값이 되고 다른 시스템에서는 16비트 또는 64비트 값이 될 수 있기 때문입니다.
  • Void_t의 종류를 입니다.vmalloc 은 ANSI/가 ANSI/ISO C보다 입니다.void을 사용법적어도 나는 그렇게 추측한다.
  • wchar_t는 와이드 문자에 사용되는 타입을 추상화한 것입니다.시스템에 따라서는 16비트 타입, 32비트 타입이 됩니다.

처리 쓰시면 .wchar_t 타이핑하다unsigned short그 코드는 아마도 다양한 플랫폼에서 더 휴대성이 있을 것이다.

에서는 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★」size_t에서는 "를 들어 "접근하기 " "접근하기 위해" "우연히" 가 필요합니다).std::vector<double>그런 다음 이 콘텍스트를 사용하여 올바른 유형을 추출합니다.예를들면typedef std::vector<double>::size_type size_t.

은 (주변)namespace {...}" " " " " " " 」

「왜 int 또는 unsigned int를 사용하지 않는가」에 대해서는, 단지 의미상 사용하지 않는 것이 더 의미가 있기 때문입니다.를 들어 '이유가 '라고 할 수 . ★★★★★★★★★★★★★★★★★,typedef an로서int그 후 로 업그레이드했습니다.long물론 코드를 바꿀 필요는 없지만 근본적으로 의미 있는 유형이어야 합니다.간략화하면, 의 입니다.size_t물건의 크기를 포함하는 데 적합하고, 사용되는 것처럼time_t는 시간 값을 저장하는 데 적합합니다.이러한 기능을 실제로 어떻게 구현하느냐가 구현의 매우 적절한 작업이어야 합니다. 것을 호출하는 int이와 같은 의미 있는 타이프네임을 사용하면, 다른 풍부한 타입과 같이, 프로그램의 의미와 의도를 명확하게 하는 데 도움이 됩니다.

언급URL : https://stackoverflow.com/questions/1119370/where-do-i-find-the-definition-of-size-t

반응형