programing

빈 구조의 크기는 C에서 0이고 C++에서 1입니다. 왜죠?

easyjava 2023. 9. 11. 22:28
반응형

빈 구조의 크기는 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

반응형