https://github.com/gavinfielder/pft
https://github.com/Mazoise/42TESTERS-PRINTF
https://github.com/charMstr/printf_lover_v2
int ft_printf(const char *, ...);
cspdiuxX%
-0.*
(+ 최소 폭?)%[플래그][폭][.정밀도]서식 문자
%[flags][width][.precision]specifier
%
%
문자를 출력해야 하는 경우 %%
와 같이 중복하여 사용해야 함플래그 | 설명 |
---|---|
+ | 양수일 때는 + , 음수일 때는 - 를 표시 (기본적으로 음수만 표시) |
- | 좌측 정렬 (기본적으로 우측 정렬) |
0 | width 필드에 주어진 옵션 자리에 맞춰 왼쪽 빈 자리에 0을 추가하고, - 와 함께 사용될 경우 좌측 정렬을 하므로 무시하게 된다. 수를 표기하는 서식 지정자 d, i, o, u, x, X 와 함께 사용할 때 .precision 필드도 함께 이용하는 경우 주어진 옵션만큼 빈 자리를 0으로 채운다. |
(space) | 양수일 때는 부호를 생략하고 공백으로 표시 (음수일 때는 - 표시) |
' (apostrophe) | 정수와 지수에 천 단위 구분자 표시 (예: 1,000) |
# (hash) | 각 진법과 형식에 맞게 0 , 0x , 0X 추가 |
0
과 precision
을 함께 사용하면 precision
만 사용한 것과 같은 결과.precision
과 함께 사용하는 경우 그 값을 고려하여 너비를 적용한다.*
-*
: 좌측 정렬하고 빈 자리 공백을 오른쪽에 추가.
은 필수이며 단독으로 사용 가능.
과 숫자를 조합하는 경우 서식 지정자에 따라 출력이 바뀐다.*
를 사용하여 정밀도를 인자로 받을 수 있다.서식 문자 | 설명 |
---|---|
c | 정수를 문자로 해석 |
s | 정수를 문자열로 해석 |
p | 포인터가 참조하고 있는 메모리의 주소 값 (8자리의 16진수) |
d | 부호 있는 10진 정수 |
i | 부호 있는 10진 정수 |
u | 부호 없는 10진 정수 |
x | 부호 없는 16진 정수 (소문자) |
X | 부호 없는 16진 정수 (대문자) |
https://dojang.io/mod/page/view.php?id=577
https://dojang.io/mod/page/view.php?id=578
...
으로 나타낸다.stdarg.h
라이브러리매크로 | 설명 |
---|---|
va_list | 가변 인자 목록, 가변 인자 포인터 (관습적으로 ap 라는 이름 사용) 내부적으로 char * 로 정의되어 있음 |
va_start | 가변 인자 시작주소를 참조하는 포인터 설정 예) va_start(ap, args) ap 는 가변 인자 포인터, args 는 마지막 필수 인자 |
va_arg | 가변 인자 포인터를 역참조 후, 지정한 데이터 크기만큼 뒤에 있는 다음 인자를 참조 예) va_arg(ap, int) ap 가 참조하는 값을 역참조하고, ap 가 typeof(int) 만큼 다음에 있는 값을 참조하도록 한다. char , short 의 경우 int 로 대신 쓰고, float 의 경우 double 로 대신 쓴 후 형변환을 해주어야 한다. (메모리에 값을 쓸 때 32 비트 주소 체계를 사용하기 때문 - 바이트 패딩) |
va_end | 가변 인자를 모두 처리 후 가변 인자를 가리키는 포인터를 NULL 로 초기화 예) va_end(ap) |
va_copy | 가변 인자 목록을 복사 (현재 위치를 저장할 때 사용) |
참고
https://www.notion.so/ft_printf-10c13274870143959f39d5c349735c94
https://modoocode.com/35