2012-05-14 4 views
1

구성 요소 선택에서 구조체 반환 함수의 이점은 무엇입니까? 예를 들어 :구조체 반환 함수

struct S { 
    int a, b; 
} x; 

이유는 아래 그림과 같이 내가이 일을 어떤 혜택이 있습니까 함수로 위의 구조체를 할당 할 수있다?

extern struct S f(); /* Why is this neccesary? */ 
x = f(); /* Is this accurate */ 

내 눈을 열어주세요.

+1

여기에 묻는 것이 확실하지 않습니다 ... –

+0

두 개 이상의 변수를 반환하려는 함수의 서명을 정의하는 것과 비슷한 질문이 있습니다. http://stackoverflow.com/a/8999520/143897 –

답변

2

이것은 단지 struct을 반환하는 함수입니다. 그것보다 더 중요한 것은 없습니다. 함수가 int을 반환하는 것을보고 놀라지 않을 것입니다. 구조체를 반환 할 때 왜 놀랍습니까?

제쳐두고, extern은 함수의 기본 저장소 클래스이기 때문에 여기에 불필요합니다.

0

포인터 대신 구조체의 복사본을 얻는다면 free()에 대해 걱정할 필요가 없으며 다른 스레드가 구조체에 쓰는 동안 하나의 스레드가 구조체에 쓰는 데이터 경주가 있는지 걱정할 필요가 없습니다. 또는 함수에 의해 리턴 된 포인터가 사용자 제어 외부에있을 수있는 일부 조치로 무효화 될지 여부를 지정합니다.

2

함수에서 여러 값을 반환 할 수 있으므로 유용합니다.

예를 들어, 다음과 같이 사용할 수있는이

struct Point { 
    int x; 
    int y; 
}; 

struct Point getMousePos() 
{ 
    struct Point pos; 
    pos.x = 567; 
    pos.y = 343; 
    return pos; 
} 

int main() 
{ 
    struct Point mouse_pos = getMousePos(); 
    printf("Mousepos %d,%d\n", mouse_pos.x, mouse_pos.y"); 
} 
기능은 앞으로 (이것은 일반적으로 헤더 파일에서 수행 될 것이다), extern로 선언 할 수

그래서 다른 기능은 매개 변수, 즉 프로토 타입을 알고 함수가 다른 파일에 정의 된 경우에도 반환 유형을 반환합니다.