혼란

2011-01-12 7 views
0

가능한 중복 :
Any guaranteed minimum sizes for types in C?
C/C++: Size of builtin types for various compilers/platforms혼란

alt text 나는이 것을 기록 책

C 언어에 관한 질문이 있습니다 int의 크기, float in c는 두 단어의 한 단어입니다. 각각 단어. 이 단어는 기계마다 다릅니다. 단어의 16 비트 기계 크기가 16 비트이므로 c의 int 크기는 16 비트, 즉 2 바이트입니다.

일부의 경우 int의 크기는 운영 체제마다 다릅니다. 창에서 있기 때문에 INT의 크기가 2 바이트이고 리눅스에 INT의 크기가 일부 TC에 대한 INT의 크기가 2 바이트 이기 때문에 컴파일러 특정 말하고 GCC 것이 4 바이트 길이입니다 4 바이트

입니다 제공

광산 (시스템 특성에 도시 됨)과 2 바이트를 나타낸다 전 C 프로그램 INT의 표시 크기를 만드는 경우 나 TC 을 사용하고 32 비트 OS (그것은 32 비트를 희망)은 인텔 펜티엄 듀얼 프로세서이다. 그러나 이 기계 또는 OS에 종속적이면 4 바이트 길이로 표시되어야합니다.

나는 완전히 혼란 스럽습니다. 내 확률값을 해결 도와주세요

(첨부 : 내 시스템의 속성은 컴퓨터에 의해 표시) int의 크기는 확실히 플랫폼 특정

+2

[C/C++ : 다양한 컴파일러/플랫폼 용 내장 유형의 크기 ] (http://stackoverflow.com/questions/1457431/cc-size-of-builtin-types-for-various-compilers-platforms)를 참조하십시오.) 및 [C의 유형에 대해 보증 된 최소 크기는 무엇입니까? ] (http://stackoverflow.com/questions/1738568/any-guaranteed-minimum-sizes-for-types-in-c). 간단히 말해서, 컴파일러에 따라 다르지만, 컴파일러는 아키텍쳐에 의해, 그리고 표준에 설정된 최소값에 의해 제약을받습니다. –

+0

감사합니다 Matthew ... –

답변

3

- 보통 32 비트에서 16 비트 플랫폼에서 16 비트, 32 비트입니다 그러나 16 비트 컴파일러는 32 비트 플랫폼에서도 16 비트 int을 생성합니다. 이러한 코드는 32 비트 OS에 의해 특수한 하위 호환 모드로 실행될 수 있습니다.

0

고정 크기 변수가있는 stdint.h 헤더 파일이 있습니다. int64_t, uint_16t, enc

+0

답장을 보내 주셔서 감사합니다. 답장을 보내 주셔서 감사합니다. –

+0

그게 무슨 뜻입니까?하지만 미안하지만 내 질문과 관련된 답변은 무엇입니까? –

+0

나는 당신이 작성한 것에 대한 질문이 명확하지 않다고 생각한다. 나는 알려진 크기의 변수가 필요하다고 생각했다. – Drakosha

1

나는 당신이 무엇을 요구하는지 이해한다고 생각합니다. 간단히 말해 int의 크기는 사용하는 컴파일러에 의해 정의됩니다.

전통적으로, 주어진 유닉스 플랫폼에서 모든 컴파일러는 같은 "ABI"를 따릅니다. 즉 int가 int이고 "운영 체제 특정"과 "컴파일러 특정"사이에 구별이 없음을 의미합니다. 예를 들어 open()을 호출하면 컴파일러는 문자 그대로 커널 열기 함수를 호출하고 반환 값은 커널에서 반환 된 int입니다.

그러나 이론적으로 C 라이브러리는 OS와 이혼합니다. 컴파일러는 시스템의 기본 단어 크기와 다른 int 크기를 가질 수 있습니다. 예를 들어 WIN32에서 실행하면 네이티브 파일 핸들은 32 비트이지만 컴파일러는 16 비트 또는 64 비트 int를 가질 수 있습니다. 이 시나리오에서는 컴파일러의 C 라이브러리를 운영 체제의 단어 크기와 구분하는 계층으로 생각할 수 있습니다.

1

가장 정확한 용어는 "구현 특정"입니다. 즉, 운영 체제 Y 용 컴파일러 X는 기본 크기 유형의 크기에 대한 자체 아이디어를 갖게됩니다.

32 비트 시스템에 2 바이트 int을 사용할 수 있습니다. 책에서 "단어"에 대한 오랜 구절은 컴퓨터가 어떻게 작동하는지 익히 알고, C 컴파일러를 구현하는 방법에 대한 요구 사항이 아닙니다.

0

비트의 최소 크기를 결정하는 언어 표준 (초안 n1256, § 5.2.4.2)에 의해 정의되는 각 유형의 값의 최소 범위가있다. charint 폭 플로트는 컴파일러 넓은 필요 이상 종류가 아니라 좁은를 사용할 수 등 다양한 적어도 32 비트이어야 적어도 16 비트이어야 넓은 적어도 8 비트이어야한다.

플랫폼의 유형 크기를 확인하려면 표준 헤더 limits.hfloat.h을 확인하십시오.