2014-05-24 8 views
0

저는 현재 "C Primer Plus, 5th edition"이라는 책을 통해 C 프로그래밍 언어를 배우는 학생입니다. 나는 임베디드 시스템 및 장치, 장치 드라이버, 저수준 물건 등에 대한 프로그래밍 경력을 쌓기 위해 배우고 있습니다. 제 질문은 매우 간단하지만 아직 교과서에서 직접 답변을 얻지 못했습니다. & 다양한 게시물 그래서 내 질문과 비슷합니다.C 프로그래밍 정수 크기 제한

SHORT, INT 또는 LONG과 같은 정수 데이터 유형의 크기를 어떻게 결정합니까? 이 질문은 많은 질문을 던진 간단한 질문이지만, 모든 사람들이 "아키텍처/컴파일러에 의존"이라는 질문에 대답하는 것처럼 보입니다.이 질문은 저를 모르는 채로 남겨두고 초보자 인 나 같은 사람을 돕지 않습니다.

인터넷에 어딘가에 명확하게 이러한 비 호환성을 설명하거나 컴파일러 (16 비트, 24 비트, 32 비트, 64 비트 등)를 보는 숫자 방식이 있으며 데이터 유형이 무엇인지 알 수 있습니까? 또는 특정 시스템에서 컴파일러와 함께 sizeof 연산자를 수동으로 사용하면 이러한 데이터 유형을 유지하는 유일한 방법을 알 수 있습니다.

+1

알아 내기 위해 'sizeof' 연산자를 사용하십시오. 예 : 'printf ("이 컴파일러와 플랫폼의 int 크기는 % ld 바이트입니다. \ n", sizeof (int));'특정 비트 폭의 정수를 원한다면 [''] (http : /en.cppreference.com/w/c/types/integer). –

+0

x86_64에서는 리눅스에서 64 비트, 윈도우에서는 32 비트라는 항상 이상한 점이 있습니다. –

+0

고정 너비 정수가 필요한 경우'stdint.h'는'uint32_t'와 같은 typedef를 정의합니다 (적어도 컴파일러가 32 비트 부호없는 정수 유형을 제공하는 경우). –

답변

4

올바른 문서가 필요하면 표준을 정의하는 문서가 필요하며 이런 종류의 질문을하면서 적어도 하나의 버전을 지정해야합니다. 예를 들어 C99는 가장 많이 사용되는 언어 버전 중 하나이며 ISO-IEC 9899-1999 문서에 정의되어 있습니다.

C 표준은 절대 크기로 크기를 정의하지 않으며, 바이트로 표시되는 최소 크기가 더 커지며 때로는 그렇지도 않습니다.

예외는 char입니다.이 크기는 1 바이트 크기로되어 있지만, 여기에 또 다른 잠재적 인 함정이 있습니다. C 표준은 바이트의 크기를 정의하지 않습니다. 그 char은 1 바이트이지만 플랫폼을 알지 못하면 아무 말도 할 수 없습니다.

프로그래밍 방식으로이 작업을 수행하려면 플랫폼에 매크로가있는 limits.h 헤더가 있어야합니다. 표준 및 플랫폼을 항상 알고 있어야합니다.

1

찾고 계시는 분은 limits.h입니다. INT_MAX (최대 값은 int) 또는 CHAR_BIT (비트 수는 char)과 같은 다양한 매크로를 정의합니다. 이 값을 사용하여 각 유형의 크기를 계산할 수 있습니다.

+0

두 개의 다른 아키텍처를 다루는 경우 아키텍처가 변경되면 이러한 매크로의 값이 변경됩니까? 전 처리기 조건으로 이러한 문제를 해결해야합니까? –