>백엔드 개발 >C++ >`sizeof('a')`가 C에서는 정수 크기를 반환하지만 C에서는 반환하지 않는 이유는 무엇입니까?

`sizeof('a')`가 C에서는 정수 크기를 반환하지만 C에서는 반환하지 않는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-23 14:02:10562검색

Why Does `sizeof('a')` Return the Size of an Integer in C, but Not in C  ?

C의 Sizeof('a')가 C와 다른 이유

프로그래밍 영역에서 데이터 유형은 크기를 결정하는 데 중요한 역할을 합니다. 데이터의 크기와 특성. 효율적이고 정확한 프로그래밍을 위해서는 다양한 데이터 유형 간의 미묘한 차이를 이해하는 것이 필수적입니다. 문자 리터럴 표현에서 C와 C 사이에는 그러한 차이점 중 하나가 있습니다.

질문: C 문자 리터럴이 정수인 이유는 무엇입니까?

C에서 sizeof(' a')는 문자 변수(char)의 크기에 해당하는 1로 평가됩니다. 이는 문자 리터럴이 단일 문자의 공간을 차지해야 한다는 직관적인 개념과 일치합니다.

그러나 C에서 sizeof('a')는 놀랍게도 정수(int)의 크기를 반환합니다. 이렇게 반직관적으로 보이는 행동은 다음과 같은 질문을 제기합니다. C 문자 리터럴은 왜 정수로 취급됩니까?

역사적 통찰: C의 진화

이러한 특이성을 밝히기 위해 우리는 C의 역사를 탐구해야 합니다. Brian Kernighan과 Dennis Ritchie가 개발한 원래 K&R C는 근본적인 특징을 가지고 있었습니다. 먼저 정수로 승격하지 않으면 문자 값을 활용하기가 어려웠습니다.

이러한 제한은 C의 산술 연산자가 동일한 유형의 피연산자를 기대한다는 사실에서 비롯됩니다. 문자와 정수는 고유한 유형이므로 표현식에서 이를 혼합하려면 문자를 정수로 명시적으로 변환해야 합니다.

실용적 솔루션: 문자 표현 통합

이러한 불편함을 해결하기 위해 C 언어 디자이너들은 실용적인 접근 방식을 취했습니다. 문자를 정수로 강제 변환하기 위한 추가 규칙을 도입하는 대신, 우선 문자 상수를 정수로 만들어 구별을 제거했습니다. 이는 언어를 단순화하고 오류 가능성을 줄였습니다.

다중 문자 상수: 과거의 유물

이 디자인 결정에 기여한 또 다른 역사적 요인은 다중 문자 상수의 존재. 작은 따옴표(예: 'abcd')로 묶인 일련의 문자로 표시되는 이러한 상수는 이전 버전의 C에서 널리 사용되었습니다. 문자 상수를 정수로 허용하면 정수의 크기에 맞도록 허용되어 두 가지 모두에 대해 일관된 표현을 제공합니다. 단일 및 다중 문자 상수.

결론

따라서 겉보기에는 변칙적인 C 문자 리터럴이 정수인 동작은 언어의 역사적 진화에서 그 뿌리를 찾습니다. 단순성과 효율성을 추구한 결과, 이후 버전의 언어에 더욱 정교한 유형 시스템이 도입되었음에도 불구하고 디자인 선택이 지속되었습니다.

위 내용은 `sizeof('a')`가 C에서는 정수 크기를 반환하지만 C에서는 반환하지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.