2012-06-28 4 views
0

왜이 코드에서 오류가 발생합니까? 링크하지 않고 컴파일 만해도 오류가 발생합니다. 컴파일러가 다른 파일에있을 가능성을 고려하지 않았습니까? 누구나 typedef 문을 컴파일러에서 처리하는 방법을 설명 할 수 있습니까? 사전에C의 typedef 동작

감사

typedef struct p* q; 

    int main() 
    { 
    struct p{ 
     int x; 
     char y; 
     q ptr; 
     }; 
     struct p p={1,2,&p}; 
     printf("%d\n",p.ptr->ptr->x); 
     return 0; 
    } 

PS : 불완전한 타입에 역 참조 내가 GCC에서 얻을 오류입니다.

+1

어떤 오류가 있었는지 공유해 주시겠습니까? –

+0

사람들은 무슨 일이 일어나고 있는지 가장 잘 이해할 수 있도록 오류의 원인을 지정해야합니다. –

+2

'main'내부에'struct p'가 있고 그 바깥 쪽은 다른 것입니다! –

답변

2

메인 외부의 "구조체 p"와 메인 내부의 "구조체 p"는 서로 다른 범위에서 정의 되었기 때문에 다른 유형입니다. 두 선언을 main 외부에 두거나 main 내부에 선언을 넣으면 컴파일러는이를 받아들이게됩니다.

함수 안에 무언가를 정의하면 "이 함수 내에서 정의를 정의합니다. 기능 밖의 어떤 것에도 적용 할 수 없습니다. "