ft_printf(5)
-
42 CURSUS / ft_printf_04 (Flow chart)
이전 플로우 차트에서 파싱을 통해 플래그와 전체 너비, 정밀도, 캐스팅 타입의 크기, 타입을 담은 구조체 opt가 만들어졌다면 해당 구조체와 지금까지 출력한 문자열의 길이인 len을 인자로 받아온 후 '타입'에 따라 각기 다른 함수로 보낸다. c, s, %의 경우는 옵션이 간단하기에 flag에서 '-'플래그가 있는지 없는지 정도를 통해 공백을 넣어주거나 정밀도만큼 문자열을 출력한다. number의 경우는 위 문자, 문자열에 비해 다양한 옵션을 가지고 있어 복잡해지는데, 기본적으로 플래그, 정밀도의 조합에 따라 꽤 많은 예외가 발생하게 되어 잘 계산하는 것이 중요하다.(+ value가 0일 경우) 기본적으로 정밀도가 수의 길이보다 작다면 무시되고 수의 길이보다 크다면 그 만큼 0이 출력된다. 그 앞에 +,..
2021.07.05 -
42 CURSUS / ft_printf_03 (Flow chart)
일단 지금까지 나온거 플로우 차트로 그려보았음 화살표라던가 컨벤션이 있을테지만 아직 제대로 쓸 줄을 모름 libft.h는 libft의 함수를 담고, 아카이빙을 먼저 함. printf는 printf의 함수 및 libft.h를 import하여 ft_printf.h를 include하는 *.c 파일에서 libft를 사용할 수 있게 함. 메이크파일은 먼저 $(MAKE) -C 명령어를 이용해 libft.a를 만든 후 cp 명령어로 이름을 libftprintf.a로 바꾸고 ar -rcs 옵션을 통해 ft_printf의 새로운 오브젝트들을 추가해줌. 함수는 while문을 이용해 고정 인자를 돌며 '%'를 만나면 ft_check_obj 함수에 va_list와 str + 1의 포인터, 그리고 최종 문자열의 길이를 담을 l..
2021.06.21 -
42 CURSUS / ft_printf_02
Printf_format_placeholder 까먹었을까봐 다시 적는 프엪의 형식 %[parameter][flags][width][.precision][length]type Parameter (optional) Parameter는 Posix 환경에서만 사용 가능하고 C99에서는 불가하다. 필드에 주어진 옵션 값을 통해 va_list에 직접 접근할 수 있다. // 예를 들어 다음과 같이 _num$를 통해 _num번째 값을 받아올 수 있다. printf("인자 순서 : %1$d, %2$d\n2번째 : %2$d \n1번째 : %1$d \n", 42, 4242); > 인자 순서 : 42, 4242 > 2번째 : 4242 > 1번째 : 42 Flags 다양한 필드 중 가장 앞에 나오는 flags는 출력의 전체 방..
2021.06.19 -
42 CURSUS / ft_printf_01(가변 인자와 매크로)
가변 인자란 무엇인가 ? printf의 프로토 타입을 보면, int printf(const char *format, ...);로 두 번째 인자가 생략 기호(ellipsis)인...라는 것을 알 수 있다. 앞의 문자열에 있는 형식의 갯수에 따라 인자의 갯수를 달리 받아야하기 때문에 가변 인자를 쓰며, 가변인자란 다음과 같다. 상황에 따라 원하는 만큼의 인자를 받아서 사용, 처리할 수 있게해주는 것이 가변 인자이다. 가변 인자(variable argument)는 헤더에 선언되어있으며, 필수 인자와 선택적 인자, 두 개를 요구한다. 선택적 인자인 가변 인자는 변수의 갯수가 정해져있지 않기 때문에 첫째로 필수 인자를 받은 후, 선택적 인자를 받게 되며, 선택적 인자의 뒤에는 다른 인자를 받을 수 없다. prin..
2021.06.18 -
42 cursus / ft_printf _00
Instructions C에서 printf는 유용하다 ! 가변 함수를 배우고 함수를 다시 확장 가능하게 잘 짜서 유용하게 쓰렴 메모리 해제, Norm 등은 너무 당연하니 생략 프로젝트에서 libft 사용이 허가된 경우, 해당 소스들과 연관된 Makefile을 libft 폴더에 Makefile과 함께 복사해 넣어두어야 합니다. 프로젝트의 Makefile은 반드시 libft의 Makefile을 사용하여 컴파일한 다음, 프로젝트 소스를 컴파일해야만 합니다.(libft.a를 넣어야 하는지, libft 파일들을 printf에 넣어야하는지 헷갈렸는데, printf가 master, libft가 slave로.. printf의 Makefile이 libft의 Makefile을 돌려야 하나 보당 Mandantory Prog..
2021.06.16