티스토리 뷰

반응형

하고 있다 ft_printf..

오늘은 가변인자에 대해 알아보았다.

 

2. 가변인자

int ft_printf(const char *format, ...)

가변인자를 이용하면 함수에서 매개 변수의 개수가 정해지지 않은 상태로 쓸 수 있다.

설명을 못하는 편이니 내가 알아볼 수 있게만 정리해보겠다.

 

int	ft_conversion(const char *s, int size, va_list ap)
{
	if (s[size] == 'c' || s[size] == 's')
		ft_putchar(va_arg(ap, int));
	else if (s[size] == 'd')
		return(ft_putnbr(va_arg(ap, int)));
	return (1);
}

int			ft_printf(const char *format, ...)
{
	va_list	ap;
	int		count;
	int		i;
	int		j;

	i = 0;
	count = 0;
	va_start(ap, format);
	while (format[i] != '\0')
	{
		if ((j = is_conversion(&format[i])))
		{
			if (j == -1)
				return (0); //이렇게 해야되나?
			count += ft_conversion(&format[i], j, ap);
			i = i + j + 1;
		}
		else
		{
			ft_putchar(format[i++]);
			count++;
		}
	}
	va_end(ap);
	return (count);
}

아직 만들고 있는 코드 덩어리...

 

ft_printf("print: %s%d", "number:", 70);

이런식으로 ft_printf를 사용하게 되는데 여기서

format == "print: %s%d"

format[i]에서 i를 올려가며 읽게 된다.

va_list ap;

va_list : 각 가변인자의 시작 주소를 가리킬 포인터

va_start(ap, format);

va_start : 가변인자 중 첫번째 인자의 주소를 가르쳐 줌

va_arg(ap, int);

va_arg : va_list의 포인터를 다음 가변인자로 이동시켜 줌

* c에서는 char type도 int로 받아야되는게 포인트!

출처 : 코딩도장

va_end(ap);

va_end : 가변인자 변수를 끝낼 때 사용

 

쓰다보니 이해해서 설명이 매우 이상하지만 아무튼 가변인자를 이해했다!

그리고 아주 조금이나마 ft_printf를 구현했다!

%c, %d는 해보았다!

근데 아직 flag를 하나도 못했다..^^

다른 사람들 코드를 보니 flag를 구조체로 한 번에 정리(?)하고 그다음 출력하는게 나은것 같아서 다음에 다시 처음부터 뚝딱뚝딱 해보려고 한다.

 

아무튼 저만큼 혼자 출력한 내 자신 너무 대견해...화이팅...

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함