COMM_T comm 은 글로벌 변수가 아닌 로컬 변수(스택에 들어가게 되는)입니다.
return 시점에서 로컬 변수는 삭제가 되므로 로컬 변수의 포인터를 넘기게 되면 받는 쪽에서 가베지 값을 받을 수 있습니다.
이윤관 님이 쓰신 글 :
: typedef struct {
: int a;
: int b;
: } COMM_T;
:
: COMM_T test_function(void)
: {
: COMM_T comm;
:
: comm.a = 100;
: comm.b = 200;
: return comm;
: }
:
: void printf_function(void)
: {
: COMM_T comm;
:
: comm = test_function();
: printf("a=%d \n", comm.a);
: printf("b=%d \n", comm.b);
: }
:
: 위함수에서 COMM_T를 포인터로 하지 않고 return 해도 문법적으로 문제가 되지 않나요?
: 전 항상 포인터로 해서 return했는데 다른분이 만든 코드를 보니까 위에서 처럼사용하고 있네요.
: 문제가 없는 코드인가요?
: COMM_T *comm으로 한후 return comm한것과 어떤 차이점이 있는건가요?
|