상세 컨텐츠

본문 제목

C언어) 함수의 인자와 리턴값으로 구조체 사용하기

개발이야기/C or C++ 언어 관련

by mycatdid0 2022. 10. 14. 16:03

본문

반응형

(포스팅 2022.10.14)

 

C언어의 함수는 리턴값을 하나만 돌려줍니다.

 

여러 개의 리턴값을 받는 여러가지 꼼수가 있는데요,

  • 전역 변수를 사용하는 방법
  • 인자로 포인터를 받아서 업데이트하는 방법 (call by reference)
  • 리턴값을 구조체(struct)로 받는 방법

 

저는 십년 넘게 C로 작업을 해왔음에도, 함수의 인자와 리턴값으로 struct를 사용할 수 있다는 것을 몰랐습니다.

 

의심이 가시지 않아, 아래 예제를 만들어보았습니다.
구조체를 함수에 전달할 수도 있고 리턴값으로 받을 수도 있습니다. 'call by value'로 전달되는게 맞습니다.

 

C언어에서 리턴값의 구현은, 함수가 종료될때 특정 레지스터에 리턴값을 기록하고, 호출한 쪽은 이 레지스터를 읽음으로써 리턴값을 받습니다. 그래서 값 한개만 리턴값으로 사용할 수 있는 것으로 알고 있었습니다.

 

함수의 인자와 리턴값으로 구조체를 사용할 수 있다는 것은, 컴파일러에서 특별한 처리를 하였다고밖에 보이지 않네요.

 

firmware 프로그래밍을 하다보니 RAM 용량에 민감해서, 함수에 구조체를 통째로 전달하고 받을 수 있다는 생각을 못한 것 같습니다. 안정성을 보자면 포인터보단 구조체를 그대로 쓰는게 낫겠지요. 앞으로는 함수의 인자와 리턴값에 구조체를 사용해 보겠습니다.

 

포스팅은 여기까지입니다. 궁금하신 점 댓글 주세요.

 

언제나 감사드립니다.

반응형

관련글 더보기

댓글 영역