printf 기능 명세 분석

유제민·2025년 4월 16일

42경산

목록 보기
17/17

ptintf 함수는 입력된 형식 문자열에 따라 여러 인자들을 출력하는 함수다.

구현할 서식지정자

%c: 하나의 문자를 출력
%s: 문자열을 출력
%d, %i: 정수(음수 포함)를 출력
%u: 부호 없는 정수 출력
%x, %X: 16진수 출력(소문자/대문자 구분)
%p: 포인터 주소 출력
%%: 문자 % 출력


printf 흐름

1_1. 고정 인자와 가변 인자

  • 고정 인자: 형식 문자열에서 매개변수 개수, 문자는 고정
  • 가변 인자: %s, %d 등 형식 지정자 뒤의 인자들, 가변적으로 개수가 달라짐

1_2. 형식 지정자 처리

  • %를 만났을 때 -> 그 다음 글자가 형식 지정자라면, 해당 타입에 맞게 인자 하나를 출력함.
  • 출력되는 값은 형식 지정자에 따라 달라진다.
    • %s -> 문자열
    • %d, %i -> 정수
    • %p -> 포인터 주소

1_3. 함수 흐름

  1. va_list 초기화 va_start(args, format)
  2. 문자열을 하나씩 읽으면서 %를 만나면 형식 지정자 처리
  3. 인자를 적절하게 꺼내어 형식에 맞게 출력
  4. 출력 후, 가변 인자 처리를 종료: va_end(args)

2. 출력 결과를 구하는 방식

2_1. write 사용

write()를 사용하여 표준 출력(stdout, fd = 1)에 직접 출력한다.

  • write(fd, buf, size) -> fd는 파일 디스크립터, buf는 출력할 데이터, size는 출력 할 데이터의 크기다.
  • 출력된 문자의 수느 ft_printf가 반환한다.

2_2. 리턴값

ft_printf는 출력된 문자의 수를 반환한다.
(이는 printf 함수의 표준 규격에 맞추기 위함이다.)


예외 및 특수 처리

3_1. 문자 처리

%c에서 출력되는 문자는 반드시 하나여야 한다는 제약이 있다.

  • write에서 1개의 문자만 출력한다.

3_2. 인자 타입 불일치

  • 형식 지정자와 인자 타입이 일치하지 않으면 정의되지 않은 동작이 발생할 수 있다.
  • 예시: %d에 문자를 전달하면 출력되지 않거나 세그폴트가 발생할 수 있다.

printf는 형식 문자열을 파싱하여, 각각의 지정자에 맞는 타입을 출력하고, 출력된 문자 수를 반환하는 함수다.

profile
무진장 게으른

0개의 댓글