문제

기계(또는 컴파일러)가 있습니까? sizeof(char) != 1?

하다 C99 표준 말한다 sizeof(char) 표준 준수 구현에서는 정확히 1이어야 합니까?그렇다면 섹션 번호와 인용을 알려주세요.

업데이트:바이트 주소를 지정할 수 없지만(최소 읽기는 4바이트, 정렬됨) 4초의 바이트만 처리할 수 있는 머신(CPU)이 있는 경우(uint32_t), 이 기계의 컴파일러가 정의할 수 있나요? sizeof(char) 4로? sizeof(char) 1이 되지만 char은 32비트를 갖습니다. (CHAR_BIT 매크로)

업데이트2: 그러나 결과의 크기는 BYTES가 아닙니다!CHAR의 크기입니다.그리고 char은 2바이트일 수도 있고, 7비트일 수도 있나요?

업데이트3:좋아요.모든 기계에는 sizeof(char) == 1.하지만 어떤 기계가 있는지 CHAR_BIT > 8 ?

도움이 되었습니까?

해결책

그것은 항상 C99의 6.5.3.4 절입니다.

유형 문자, 부호없는 문자 또는 서명 된 char (또는 그 자격을 갖춘 버전)가있는 피연산자에 적용하면 결과는 1입니다.

편집 : 귀하의 질문의 일부가 아니라 Harbison and Steele의 관심을 끌기 위해 3rd. (사전 C99) p.

저장 장치는 한 문자가 차지하는 저장량으로 간주됩니다. 유형의 객체의 크기 char 그러므로 1입니다.

편집 : 업데이트 된 질문에 대한 답변으로 Harbison and Steele의 다음 질문과 답변은 관련이 있습니다 (Ibid, 6 of 6) :

어떤 유형의 C 구현을 가질 수 있습니까? char -2,147,483,648에서 2,147,483,647 범위의 값을 나타낼 수 있습니까? 그렇다면 무엇이 될까요 sizeof(char)그 구현하에? 가장 작고 가장 큰 유형의 범위는 무엇입니까 int?

답변 (ibid, p. 382) :

구현이 32 비트를 사용하여 유형을 나타내는 데 허용됩니다 (폐기 한 경우) char. 구현에 관계없이 값 sizeof(char) 항상 1입니다.

이것은 구체적으로 케이스를 다루지 않지만 바이트가 8 비트이고 char 바이트 중 4 개입니다 (실제로 C99 정의에서는 불가능합니다. 아래 참조). sizeof(char) = 1 C99 표준과 Harbison and Steele에서 항상 명확합니다.

편집 : 실제로 C99에 관한 한 (이것은 Upd 2 질문에 대한 응답) sizeof(char) ~이다 6.5.3.4 절에서 바이트로 다시 :

연산자 크기는 오페라의 크기 (바이트)를 산출합니다.

위의 인용문과 결합하여 8 비트의 바이트 및 char 바이트 중 4 개가 불가능하다 : C99의 경우 바이트는 char.

7 비트의 가능성에 대한 귀하의 언급에 대한 답변 char: 이것은 C99에서는 불가능합니다. 표준의 5.2.4.2.1 절에 따르면 최저한의 8 :

그들의 구현 정의 값은 동일해야합니다 또는 더 큰 내 강조] 같은 표시와 함께 표시된 것들에 대한 규모.

-비트 필드가 아닌 가장 작은 물체에 대한 비트 수 (바이트)

 **CHAR_BIT 8**

- 유형 서명 숯의 대상에 대한 최소값

**SCHAR_MIN -127//−(27−1)** 

- 유형 서명 숯의 대상에 대한 최대 값

**SCHAR_MAX +127//27−1** 

- 부호없는 유형의 객체의 최대 값

**UCHAR_MAX 255//28−1** 

- 유형 숯의 객체에 대한 최소값

**CHAR_MIN**    see below 

- 유형 숯의 객체의 최대 값

**CHAR_MAX**    see below

[...]

표현식에 사용될 때 char 유형 대상 객체의 값이 서명 된 정수로 취급되는 경우, char_min의 값은 schar_min의 값과 동일하며 char_max의 값은 schar_max의 값과 동일해야합니다. 그렇지 않으면, char_min의 값은 0이어야하며 char_max의 값은 uchar_max의 값과 동일합니다. uchar_max 값은 2^char_bit -1과 같아야합니다.

다른 팁

기계가 있는 곳은 없어요 sizeof(char) 4입니다.항상 1바이트입니다.해당 바이트는 32비트를 포함할 수 있지만 C 컴파일러에 관한 한 1바이트입니다.자세한 내용은 실제로 안내해 드리겠습니다. C++ FAQ 26.6.해당 링크는 해당 내용을 꽤 잘 다루고 있으며 C++가 C의 모든 규칙을 가져왔다고 확신합니다.당신은 또한 볼 수 있습니다 comp.lang.c FAQ 8.10 8비트보다 큰 문자의 경우.

업데이트2:그러나 sizeof 결과는 바이트가 아닙니다. !CHAR의 크기입니다.그리고 char 할 수 있습니다 2 바이트 또는 7 비트 (가능) 일 수 있습니까?

예, 바이트입니다.다시 말하겠습니다. sizeof(char) C 컴파일러에 따르면 1바이트입니다.사람들이 흔히 말하는 바이트(8비트)는 C 컴파일러가 바이트라고 부르는 것과 반드시 ​​동일하지는 않습니다.C 바이트의 비트 수는 시스템 아키텍처에 따라 다릅니다.또한 최소 8이 보장됩니다.

PDP-10 및 PDP-11 였다.

업데이트: PDP-10 용 C99 컴파일러가 없습니다.

아날로그 장치 32 비트 Sharc DSP의 일부 모델은 Char_bit = 32이고 TMS32F28XX의 Texas Instruments DSP는 Char_bit = 16입니다. 보고되었다.

업데이트 : 있습니다 PDP-10의 경우 GCC 3.2 char_bit = 9로 (해당 아카이브에서 포함/리미트를 확인).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top