42seoul/circle-1
[ft_printf] 2. 가변인자 (variadic arguments)
saniii
2022. 1. 16. 18:59
# 가변인자 (variadic arguments)
: 매번 함수에 들어가는 인수의 개수가 변하는 것
- 최소 한 개의 정해진 자료형의 매개변수가 필요하다. (변수값을 넣을 문자열)
- va_list : 가변 인자 목록
#include <stdarg.h>
va_list ap;
- 가변 인자의 메모리 주소를 저장하는 포인터
- va_start : 가변 인자를 가져올 수 있도록 포인터를 설정
#include <stdarg.h>
void va_start(va_list ap, last);
- ap의 시작 위치를 함수에 주어진 마지막 고정 인자(last) 다음으로 초기화
- 가변 인자에 접근하기 전에 va_start를 호출해야한다. (일반적으로 함수 시작부분에 호출)
- va_end : 가변 인자 처리가 끝났을 때 포인터를 NULL로 초기화
#include <stdarg.h>
void va_end(va_list ap);
- 함수가 끝나기 전에 반드시 사용
- va_arg : 가변 인자 포인터에서 특정 자료형 크기만큼 값을 가져온다.
#include <stdarg.h>
TYPE va_arg(va_list ap, TYPE);
- 값을 읽고나서 값의 크기만큼 포인터의 주소를 옮긴다. (다음 가변인자로 이동)
- 이때 va_arg가 읽을 수 있는 값의 최소 크기는 int(4byte)이며 char 형의 값을 읽고 싶은 경우 int크기만큼 읽고 char로 형변환한다.
- va_copy : 가변 인자 목록을 복사
#include <stdarg.h>
void va_copy(va_list ap_copy, va_list ap);
- ap에 저장된 가변 인자를 ap_copy로 복사