본문 바로가기
42seoul/circle-1

[ft_printf] 2. 가변인자 (variadic arguments)

by saniii 2022. 1. 16.

 

 

# 가변인자 (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로 복사

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

댓글