Unborn 8.0 Yellow Pointer
본문 바로가기
42 SEOUL/1_ft_printf

[42Seoul/ft_printf] 가변인자(variable argument)

by 에삐니 2022. 4. 18.
728x90

가변 인자란?

이번 ft_printf 프로젝트를 진행하면서 알아야 할 개념은 가변 인자이다. 매개변수의 개수가 정해지지 않은 함수에 들어가는 인수(argument)의 개수가 변하는 것을 가변 인자(가변 인수, variable argument)라고 한다.

- 가변 인자 작성 방법 예

반환값 자료형		함수이름 (자료형 고정매개변수, ...)
{
	코드
}

함수에서 가변 인자를 정의할 때는 고정 매개변수가 한 개 이상 있어야 하며 고정 매개변수 뒤에 ... 을 붙여 매개변수의 개수가 정해지지 않았다는 표시를 해준다. 또한 가변 인자 뒤에는 다른 매개변수를 저장할 수 없다.

ft_printf의 경우 아래와 같이 쓰일 수 있다.

#include <stdio.h>
#include <stdarg.h>

int	ft_printf(const char *format, ...)
{
    int length;
    va_list	ap;
    
    va_start(ap, format);
    for (int i = 0; i < format; i++)
    {
    	int length = va_arg(ap, int);
    }
    va_end(ap);
}
  • #include <stdarg.h> : va_list, va_start, va_arg, va_end가 정의된 헤더 파일이다.
  • (const char *format, ...) : 가변 인자의 개수를 받으며 ...로 가변 인자를 설정한다.
  • va_list ap : 가변 인자 목록 포인터이다. 가변 인자의 메모리 주소를 저장하는 포인터이다.
  • va_start(ap, format) : 가변 인자 목록 포인터를 설정한다.
  • for문 : 가변 인자 개수만큼 반복한다.
  • va_arg(ap, int) : int 크기만큼 가변 인자 목록 포인터에서 값을 가져온다. ap를 int 크기만큼 순방향으로 이동시킨다.
  • va_end(ap) : 가변 인자 목록 포인터를 NULL로 초기화한다.
  • 보통 첫 번째 매개변수에는 가변 인자의 개수를 받도록 지정한다.
728x90
반응형

댓글