티스토리 뷰

반응형

- 프로토타입

int ft_printf(const char *format, ...)

 

- 형식 구조

%[플래그][폭][.정밀도]서식지정자

(앞으로 폭은 width, 정밀도는 precision이라고 칭한다, [플래그][폭][.정밀도]를 합쳐서 플래그라고 칭할 수도 있다.)

 

- 기본 서식 지정자

* mandatory : cspdiuxX%

%c 문자
%s 문자열
%p 포인터의 메모리 주소, 리눅스, OS X에서는 앞에 0x 붙고, A~F 소문자로 출력높은 자릿수의 0 생략
%d 부호가 있는 10진 정수
%i 부호가 있는 10진 정수
%u 부호가 없는 10진 정수
%x 부호가 없는 16진 정수(소문자)
%X 부호가 없는 16진 정수(대문자)
%% %기호 출력

 

- 플래그

* mandatory : -0.*

- 왼쪽 정렬
0 출력하는 폭의 남는 공간에 0으로 채움, '-'플래그와 동시 사용 불가, '-'플래그의 우선순위가 더 높음
. '.'뒤에 나오는 숫자가 precision, precision은 출력되는 숫자의 최소길이(%s에서는 최대길이)
* width자리나 precision자리에 들어가서 wildcard로 쓰임, va_arg(ap, int)를 통해 입력해준 값 받아옴

 

- ft_printf 구현 순서(추천)

형식구조 이해 => width, precision, 플래그 파싱 =>
형식 지정자마다의 width/precision/strlen 관계 정리 => (width)%csdiuxXp 순서로 구현

이 순서를 추천하는 이유

더보기

형식구조를 이해하면 플래그 => width => precision 순서로 나오는 것을 알게 된다. 이에 맞춰서 파싱해준다. (init 필수)

제대로 파싱되었는지 확인해보고 그다음 각 형식 지정자 마다 width/precision/strlen의 관계를 알아본다. diuxXp에서 관계는 비슷하다. s에서 특이하다.

(width)%csdiuxXp 순서로 구현하는 이유:

width는 계속해서 쓰인다. %는 간단하다. c도 간단하다. s도 precision을 고려해야되지만 간단한 편이다.

int형(d == i) 먼저 구현하면 다른 숫자들도 어느정도 틀이 비슷하기 때문에 int 먼저 구현한다.

unsigned int는 int와 같은 10진수, int에서 조금만 바꾸면 되니까 그다음에 구현한다.

16진수 hexadecimal (x, X)는 x를 만들고 거기에 ft_toupper로 X를 구현하는게 좋다.

소문자로 출력되면 pointer출력에 편하다.

 

- width/precision/strlen의 관계 (숫자에서)

width : 출력되는 최소 길이 (부호, 숫자, precision 포함)

precision : 숫자의 최소 길이 (부호 미포함)

strlen : 숫자의 길이(부호 미포함)

 

- Test tool

github.com/cclaude42/PFT_2019

mandatory만 가능 + 형식 지정자 별로 확인 가능 + 제일 느슨한 테스트 툴 (이걸 먼저 돌려보기)

github.com/gavinfielder/pft

bonus까지 확인 가능 + 형식 지정자 별로 확인 가능+undefined 테스트가 많음

github.com/charMstr/printf_lover_v2

bonus까지 확인 가능 + 형식 지정자 별로 확인 가능 + 다른 테스트 툴 통과해도 이거 통과 못하면 KO 뜨는 경우 있다고함

github.com/Mazoise/42TESTERS-PRINTF

mandatory만 가능 + 형식 지정자를 섞어서 테스트하는게 많아서 모두 구현하고 마지막에 돌려보는게 나음

반응형

'42Seoul > 42cursus' 카테고리의 다른 글

[cub3d] 차근차근 시작하기  (0) 2020.11.07
[ft_server] subject에서 모르는 단어 찾아보기  (0) 2020.09.15
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함