[42seoul] ft_printf

ppparkta·2022년 7월 22일
0

42Seoul

목록 보기
1/7

참고자료1
참고자료2

사전학습

가변인자

#include <stdarg.h>

  • 인자의 수가 몇개인지 모르기 때문에 스택에 쌓았다가 하나씩 빼서 쓰는 자료형

va_list

  • 길이가 변할 수 있는 인수들을 저장하기 위한 저장공간

자료를 쭉 담을 수 있는 연결리스트라는 느낌

va_start

va_start(va_list ap, 고정인수)

  • va_list를 초기화하는 함수

va_list의 첫번째 가변인자 주소를 알려면 고정인수가 필요함. 자료형의 크기를 결정하는 인자.

va_arg

  • ap포인터가 위치한 부분의 데이터를 읽어서 반환하는 함수

ap포인터를 타입 길이(고정인수 크기)만큼 뒤로 옮기기 때문에 그 다음 값이 이어서 출력됨

va_end

  • va_list를 null로 초기화하는 함수.

가변인자의 사용이 끝날 때 사용하는 함수임

사용예시

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

void printNumbers(int args, ...) 
{
    va_list ap;    // 가변 인자 목록 포인터

    va_start(ap, args);    // 가변 인자 목록 포인터 설정
    for (int i = 0; i < args; i++)    // 가변 인자 개수만큼 반복
    {
        int num = va_arg(ap, int);    // int 크기만큼 가변 인자 목록 포인터에서 값을 가져옴
                                      // ap를 int 크기만큼 순방향으로 이동
        printf("%d ", num);           // 가변 인자 값 출력
    }
    va_end(ap);    // 가변 인자 목록 포인터를 NULL로 초기화

    printf("\n");
}

int main()
{
    printNumbers(1, 10);                // 인수 개수 1개
    printNumbers(2, 10, 20);            // 인수 개수 2개
    printNumbers(3, 10, 20, 30);        // 인수 개수 3개
    printNumbers(4, 10, 20, 30, 40);    // 인수 개수 4개

    return 0;
}

Mandatory part

printf

  • 인자를 받아 출력하는 함수

  • 사용예시) /printf("abcd") / printf("%d", 32) /.../

  • 서식지정자 % d i u x X q c s

첫번째 인자를 읽으면서 % 를 발견하면 그 뒤의 문자를 읽어서 다음 인자와 매치시킴

서식 지정자

%d%i%u%x%X%c%s%p%%
10진수 숫자10진수 정수부호없는 10진수 정수16진수 소문자16진수 대문자단일문자문자열void포인터(%)출력
profile
겉촉속촉

0개의 댓글