프로그래밍

 3198, 1/160 회원가입  로그인  
   ldshyun3
   [C언어]두번째 구조체정의를 하기도전에 첫번째구조체멤버로 두번째 구조체타입에 해당하는 포인터변수선언이가능한이유좀알려주세요.

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=2941 [복사]


안녕하세요?

구조체 정의부분에서 이것저것 테스트해보다가..아래와같이..



#include <stdio.h>

struct won_a
{
        int i,j;
        struct won_a* a_1; //ok
        struct two_b* b_2; //ok  <=여기서 왜 정상으로뜨는지 알고싶습니다.
        struct two_b b_3; //error
}start;

struct two_b
{
        int k,m;
        struct won_a a_2; //ok
        struct two_b* b_1; //ok
        struct won_a* a_3; //ok
}stop;

int main (void)
{

        

        return 0;
}

첫번째 구조체정의부분에서 두번째구조체가 정의되기도전에 두번째구조체 타입의 포인터변수가

선언될수있는지 여쭙고싶습니다.. c언어는 절차지향방식이라고들었거든요?

함수를 만들때도 함수원형선언이 존재하는이유도 컴파일러에게 미리 이러한 함수가 정의되있다고

알려주기위함이라고 들었는데.. 2번째 구조체 타입의 포인터변수가 1번째 구조체 멤버로 정의될수있는지..

당최 이해가 가질않습니다..

마치 2번째 설계도가 아직 만들어지지도 않았는데 완성품이 먼저 나온느낌이랄까요?

카페에도 글을 올렸지만 답글도없고해서 여기다 질문드려요..

부탁드립니다..

  Hit : 4678     Date : 2011/04/09 09:59



    
/x7375696e6567 #include <stdio.h>
int main() {
func();
}
void func() {
printf("hello \n");
}
랑
#include <stdio.h>
void func() {
printf("hello \n");
}
int main() {
func();
}
이거랑
같은 이유랑 비슷한거 아닐까요
2011/04/09  
ldshyun3 관심주셔서 감사드립니다^^;

예제주신 첫번째 소스내용에서 함수원형선언이 먼저와야할것같고요.

두번째소스내용은 함수원형선언을 안할시에 쓰이는 내용같습니다.

==============

#include <stdio.h>
void func(); <- 함수정의가 아래에있어서 컴파일러에게 원형선언으로 귀뜸해주지않을까싶네요.
int main() {
func();
}
void func() {
printf("hello \n");
}
랑
#include <stdio.h>
void func() <-함수를 미리 정의한상태인듯하네요.이럴땐 함수원형선언이 필요없겠죠.
{
printf("hello \n");
}
int main() {
func();
}
2011/04/09  
Prox 답글로 올려논글도 한번 읽어보세요 ㅎ 2011/04/09  
ldshyun3 구조체 정의가 이루어져야 구조체사용자 정의타입이 만들어지는걸로 아는데요..

위경우는 첫번째구조체에서 컴파일러가 분명 struct two_b* 타입을 어찌인식할수있느냐가

제궁금증입니다. 컴파일타임에서 첫번째구조체정의가 이루어지는 상태라면

두번째구조체는 아직 인식하지못하는 영역인것같은데말이죠..

이클립스로 struct two_b* b_2; //ok 이부분을 마우스로 같다대면

두번째 구조체를 가르키더라구요.. 디버그가 되지않은 상태에서말이죠..

점점 아리송해집니다..ㅠㅠ
2011/04/09  
Prox 이클립스의 경우, 텍스트에디터의 성격도 가지기 때문에
선언순서에 관계없이 자유로운처리가 가능한거같고요 (에디터는 절차지향을 따를필요가 없지요)
컴파일 타임엔 아마 제답변에 따라 동작할듯 싶네요 ㅎㅎ
2011/04/10