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
반응형
'42 SEOUL > 1_ft_printf' 카테고리의 다른 글
[42Seoul/ft_printf] 프로젝트 구현 (0) | 2022.04.19 |
---|---|
[42Seoul/ft_printf] 서식지정자 (format specifier) (0) | 2022.04.19 |
[42Seoul/ft_printf] 프로젝트 소개 (0) | 2022.04.18 |
댓글