출처: https://blog.iroot.kr/341 [RootKR] [C]구조체 안에서 정의되지 않은 구조체를 쓰려면?

상세 컨텐츠

본문 제목

[C]구조체 안에서 정의되지 않은 구조체를 쓰려면?

UNIX&C언어

by QKRM 2020. 2. 29. 00:07

본문

제목이 장황하지만 저것 보다 정확한 제목을 쓰기 힘드네요...

우리는 호구조사를 하고 싶습니다. husband와 wife 구조체를 만들고 나이 이름, 배우자의 정보를

저장하고 싶지만 컴파일러가 일을 안하네요, 이럴때는 어떻게 해결해야 할까요...

 

일단 문제해결을 위해선 문제가 왜 발생했는지를 알아야 합니다.

에러코드는 배우자 field가 완벽하지 않은 타입을 가지고 있다고 하네요?

저게 무슨말일까....고민을 해봅시다. 충분히...그리고 스크롤을 내려주세요

 

 

 

 

 

 

 

 

 

 

 

 

 

 

https://qkrm.tistory.com/6

 

[C] 구조체는 어떻게 저장될까? (구조체에서의 패딩)

우리는 이제 구조체가 어떻게 선언되는지 압니다. 하지만 이 구조체가 어떻게 저장되는지는 아직 모르죠. 구조체가 어떻게 저장이 되는지 알게된다면 구조체를 사용할때 나타나는 컴파일 에러들 중 일부를 잡을 수..

qkrm.tistory.com

바로 이전글에 마지막 줄에 해답이 있습니다! 바로 우리는 struct wife의 크기를 모른다는 거죠.

컴파일러가 컴파일을 하려고 보니 struct wife의 크기를 몰라

기준으로 잡아야할 크기를 몰라서 파업을 한겁니다.

이제 문제를 알았으니 해결하는건 식은죽 먹기겠죠!

 

1
2
3
4
5
6
7
8
9
struct husband {
    int    age;
    char    name[10];
    struct wife {
        int age;
        char name[10];
        struct husband spouse;
    }spouse;
} a;

 

이런식으로 husband 안에서 wife를 정의해 주면......당연하게도 컴파일이 안됩니다....

에러메시지를 확인해보면 이유는......

어쨋든 우리는 구조체 안에서 구조체를 참조하고싶은데 구조체를 선언하는건 안됩니다...

계속 물레방아처럼 돌고돌 뿐이니까요 사실 해결방법은 매우 간단합니다!

 

바로 멤버를 구조체가 아닌 포인터로 참조하는거죠! 포인터의 경우 운영체제에 따라

4/8 바이트의 크기를 갖습니다(32bit OS = 4, 64bit OS= 8), 그러므로 컴파일러는

이제 모든 변수의 크기를 아는거죠! 사실 이전글과 이글은 서로를 참조하는 글입니다...

꼭 이 struct huband,wife 같이...구조체가 자기 자신이아닌 다른 구조체를 참조하는 상황도

생각보다 많기 때문에 꼭 한번 알아두시면 좋을 것 같습니다!

관련글 더보기

댓글 영역