ft_printf
가변 인자
C 라이브러리의 printf를 VA_ARG를 활용하여 직접 구현하는 과제이다. 지원하는 타입, 플래그, 정밀도의 종류는 실제 printf보다 제한되어 있다.
- 과정: 42 Seoul Inner Circle
- 언어: C
- GitHub: https://github.com/Budnarae/42_innercircle_course/tree/main/ft_printf
개요
printf는 포맷 문자열을 받아 그 안의 형식 지정자(%d, %s 등)를 실제 인자 값으로 치환하여 출력하는 함수이다. 인자의 개수와 타입이 호출마다 달라지므로, 이를 처리하기 위해 가변 인자(variadic arguments) 메커니즘(stdarg.h)을 사용한다.
/42_innercircle_course/ft_printf/ 경로의 tester.c 파일을 참조하여 tester 파일을 실행하면 ft_printf의 동작을 확인할 수 있다.
구현 내용
형식 지정자 파싱 및 출력
포맷 문자열을 순회하며 %를 만나면 이후 문자를 해석하여 해당 타입에 맞는 출력 경로로 분기한다. 아래 형식 지정자를 지원한다.
| 지정자 | 출력 |
|---|---|
%c | 단일 문자 |
%s | 문자열 |
%p | 포인터 주소 (16진수) |
%d, %i | 10진수 정수 |
%u | 부호 없는 10진수 정수 |
%x | 16진수 정수 (소문자) |
%X | 16진수 정수 (대문자) |
%% | % 문자 자체 출력 |
출력 길이 반환
printf와 동일하게 출력한 문자 수를 반환한다.
보너스: 플래그/너비/정밀도 확장
아래 플래그와 옵션을 모두 구현하였다.
| 옵션 | 동작 |
|---|---|
- | 출력을 필드 너비 내에서 왼쪽 정렬 |
0 | 빈 자리를 공백 대신 0으로 채움 |
. | 정밀도 지정 (문자열의 최대 출력 길이, 숫자의 최소 자릿수) |
* | 너비 또는 정밀도를 인자에서 읽음 |
+ | 양수에도 + 부호를 출력 |
| 양수 앞에 공백 출력 |
# | %x, %X에 0x, 0X 접두사 추가 |