2014-12-30 2 views
2

저는 꽤 이해할 수없는 코드가 있습니다.유니온 포인터를 함수처럼 선언하십시오.

typedef double Align; 
union header{ 
    struct{ 
     union header *ptr; 
     unsigned int size; 
    }s; 
    Align x; 
}; 
typedef union header Header; 

그래서이 유니온을 생성 한 후에는 이상하게 사용됩니다.

Header *morecore(unsigned);  

다음 정상적인 기능

Header *p; 
p = morecore(nunits); 

처럼라고 정확히 어떻게이 일을합니까? 이 "함수"의 작동 방식을 알려주는 코드는 어디에도 없습니다.

+0

추가 정보가 필요합니다.이 코드가 컴파일됩니까? 실행됩니까? 어떻게 int를 컴파일하고 있습니까? 너는 무엇과 연결되어 있니? 당신의 컴파일러는 무엇입니까? morecore가 언급 된 곳은 어디입니까? 이 모든 것이 중요합니다. 자세한 내용/전체 코드를 알려주십시오. – Leonardo

답변

3
Header *morecore(unsigned); 

이 함수는 Header 유형의 포인터를 반환합니다. 반환 값이

Header *p = morecore(nunits); 

입니다 동일한 유형에 할당 그래서 그래서 기본적으로 기능 morecore()는 내부적으로 어떤 작업을 수행하고 포인터를 반환하고,이 반환 값은 p에 할당됩니다.

+0

요점은 아무데도 선언 된 함수가 없다는 것입니다! 그곳에 대한 코드는 전혀 없으며 언급 된 곳은 "Header * morecore (unsigned)"와 "p = morecore (nunits)"입니다. – Chikage

1
Header *morecore(unsigned); 

unsigned 1 개 파라미터를 취하고 Header 포인터를 리턴 morecore라는 함수의 전방 선언한다. 헤더가 정의 된 방식과 관련이 없습니다. 이 함수는 코드의 본문과 함께 어딘가에 정의됩니다.

+0

"* forward *"는 중복됩니다. 함수 선언은 함수 선언입니다. 작성한대로 구현이 다른 곳에있을 수 있습니다. – alk

+0

@alk : 정의는 선언이기도하지만 앞으로 선언이라고하지는 않습니다. – mafso

+0

요점은 아무데도 선언 된 함수가 없다는 것입니다! 코드가 전혀 없다. 언급 된 곳은 "Header * morecore (unsigned)"와 "p = morecore (nunits)"이다. – Chikage

관련 문제