가변함수, 가변인자(variable argument)
가변인자 다루기 variable argument
<stdarg.h>
- 가변인수를 받는 함수 만들기
int ft_printf(const char *c, ...);
int sum(int count, ...);
파라미터의 ', ...'부분이 가변인자를 받는다.
.
va_list
가변인자의 포인터를 저장하는 구조체
va_list ap;
(argument pointer)
- ap를 선언하고 다른 함수로 ap를 넘겨줄때
void test(va_list *ap);
파라미터를 포인터로 설정하고
test(&ap);
주소로 넘겨주기
그냥 va_list ap 로 주고 받아놓고 오류 찾느라 헤맸다.
.
void va_start(va_list ap, last);
ap를 첫번째 가변인자 주소로 맞춰준다.
last = 마지막 고정인수
ex) va_start(ap, c);
.
type va_arg(va_list ap, type);
ap를 type에 맞춰 읽어주고, 다음 가변인자 위치로 움직여준다.
void va_copy(va_list dest, va_list src);
dest(va_start로 초기화되지 않은)로 src를 copy
va_start()로 초기화, va_arg()로 접근, va_end()로 마무리, copy본도 똑같은 과정을 거쳐야 한다.
아직 써보진 못했다.
.
void va_end(va_list ap);
한 function 안에 va_start 로 시작, va_end로 끝을 맺어야한다.
// 왜 한 함수안에서 일어나야 하는 걸까? ap를 다른 함수로 넘겨줘서 사용했을때 영향을 받는가?
.
- 참고 링크
man 3 stdarg - https://linux.die.net/man/3/stdarg
https://dojang.io/mod/page/view.php?id=578
https://norux.me/19
https://jangsalt.tistory.com/entry/가변-인수-vastart-vaend-vaarg-valist