빈 구조의 크기는 C에서 0이고 C++에서 1입니다. 왜죠?
가능한 중복:
C++의 빈 클래스
C에서 빈 구조물의 크기는 얼마입니까?
C++의 빈 구조물의 크기가 1이라는 것을 어딘가에서 읽었습니다.그래서 검증을 해볼까 했습니다.아쉽게도 C파일로 저장하고 사용하였습니다.<stdio.h>헤더랑 출력을 보고 깜짝 놀랐습니다.0이었습니다.
그 말은
struct Empty {
};
int main(void)
{
printf("%d",(int)sizeof(Empty));
}
인쇄중이었습니다0C 파일로 컴파일될 때 그리고1C++ 파일로 컴파일되는 경우.그 이유를 알고 싶습니다.난 그걸 읽었다.sizeof크기가 다음과 같다면 C++의 빈 구조는 0이 아닙니다.0그러면 클래스의 두 개체는 동일한 주소를 가질 수 없습니다.어디가 잘못됐나요?
C에서는 빈 구조를 가질 수 없습니다.구문 제약 조건 위반입니다.그러나 gcc는 C의 빈 구조를 확장자로 허용합니다.또한 구조물에 명명된 멤버가 없는 경우 동작이 정의되지 않습니다.
C99다음과 같이 말합니다.
struct-declaration-list에 명명된 멤버가 없으면 동작이 정의되지 않습니다.
그렇게
struct Empty {}; //constraint violation
struct Empty {int :0 ;}; //no named member, the behaviour is undefined.
그리고 예 빈 구조의 크기는 C++는 0이 될 수 없습니다 :)
몇 가지 좋은 이유가 있습니다.다른 것들 중에서, 이것은 그 구조에 대한 포인터 위의 포인터 산술이 무한 루프로 이어지지 않도록 보장하기 위한 것입니다.자세한 정보:
http://bytes.com/topic/c/insights/660463-sizeof-empty-class-structure-1-a
여기에 왜 이런 일이 일어나는지, 그리고 더 적절한 방법으로, 그것을 (안전하게) 해결할 수 있는 방법을 설명하는 멋진 기사가 있습니다:)
http://www.cantrip.org/emptyopt.html
언급URL : https://stackoverflow.com/questions/3849334/sizeof-empty-structure-is-0-in-c-and-1-in-c-why
'programing' 카테고리의 다른 글
| 비슷한 단어는 어떻게 질의합니까? (0) | 2023.09.11 |
|---|---|
| 두 개의 열을 하나로 선택하는 방법은? (0) | 2023.09.11 |
| $.ajax 및 JSONP. 구문 분석 오류 및 탐지되지 않은 구문 오류:예기치 않은 토큰: (0) | 2023.09.11 |
| Tomcat에서 Oracle을 사용하여 JNDI 데이터 원본 설정 (0) | 2023.09.11 |
| 동시성:C/C++로 작성된 파이썬 확장자는 글로벌 인터프리터 잠금의 영향을 받습니까? (0) | 2023.09.11 |