구조체의 반환....이상해요~!
글쓴이: umean2me / 작성시간: 금, 2005/12/02 - 4:19오후
제가 기억하기로 C에서 구조체를 인자로 넘기거나 반환하는것이
안되었던 것으로 기억하고 있습니다. 그래서 포인터로 많이 넘긴거로 생각되는데....(c++을 마니 써서...c를 마니 까먹은 상태라..)근데 해보니까 되네요?
제 기억이 틀렸습니까? 제가 C를 접한건 94년즈음 이거든요.
다음의 코드는 잘 됩니다. 구조체가 일반 INT같은 타입처럼
복사되어 함수로 넘어오고 복사되어 리턴됩니다....다른 분들은 기억이 어떠신지...아니면 아시는 뭔가라도.....흑...
#include <stdio.h> typedef struct { int i; int j; int cc; } AA; AA ttt(AA a) { printf("%p\n", &a); a.i = 3; return a; } int main(void) { AA a; AA b; printf("%p\n", &a); b = ttt(a); printf("%d\n", b.i); }
Forums:
Re: 구조체의 반환....이상해요~!
기억이 틀리셨습니다.
값으로 반환이 가능합니다.
다만 overhead 가 발생하죠.
int 형과 비슷하다고 보시면 됩니다.
위 AA structor 를 int라고 가정해 볼까요?
그럼 아래와 같이 되겠죠?
AA == int 이므로 치환을 하면
입니다.
고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"
Re: 구조체의 반환....이상해요~!
umean2me님의 기억이 맞을 수도 있습니다. 구조체의 복사와 대입은 표준에
잘 정의가 되어 있습니다만, 표준 이전에서는 그것이 안되었습니다. C가 표준화된
것이 90년(실질적으로는 89년)이었는데, 94년 당시까지 표준을 따르지 않는
컴파일러가 상당히 많이 사용되었을 수 있고(C99가 발표된 지 6년이 지났지만
아직까지 그를 따르는 컴파일러가 흔치 않은 걸 보면 무리도 아니죠.) 그때의 기억으로
안된다고 생각하실 수도 있겠지요.
뭐, 별로 중요한 얘기는 아닙니다. 지금은 된다는 것이 중요하죠.
구조체 자체를 인수로 넘기거나 리턴할경우에는 해당 구조체 크기만큼의 공간
구조체 자체를 인수로 넘기거나 리턴할경우에는 해당 구조체 크기만큼의 공간을 확보하고
구조체 내부 멤버들을 다 복사하죠.
이에 따른 오버헤드는 엄청나죠. 스택도 엄청 잡아먹고요.
Written By the Black Knight of Destruction
댓글 달기