Main Function
int ft_printf(const char *foramt, ...)
{
va_list ap;
int p_len;
va_start(ap, format)
가변인자의 길이를 계산하고, 한 변수(p_len)에 저장함
va_end(ap)
if p_len이 -1이면 return (-1)
return (p_len)
}
- 처음에 va_list(typedef char *) 타입의 포인터 변수(→ap)를 생성해 줍니다.
- va_start 함수를 통해 ap가 가변 인자 첫 번째 주소를 가리키도록 해줍니다.
- core 부분 함수가 들어갈 예정인데, printf로 출력되는 총 길이를 p_len 변수에 받습니다.
- va_end 함수를 통해 ap 포인터를 NULL로 다시 설정해 줍니다.
- p_len의 길이가 -1이면 에러가 발생한 것이므로 return (-1)을 해줍니다.
- 위 작업들이 끝난 경우 p_len을 리턴해 줍니다.
Core Function
static int ft_printf_core(const char *format, va_list ap)
{
while(널('\\0') 만날때 까지)
{
if '%'를 만나면
{
while (널('\\0') 만날때 까지 && !istype()) //istype : 타입인지 체크
{
format_parsing()
rd_size += tycheck()
}
else // 안 만나면
한 글자 출력 !
rd_size += 1;
}
}
}