[ft_printf] printf 어떻게 구현해야 할까?

개발하는 곰댕이·2021년 4월 11일
1

42Seoul

목록 보기
7/45

시작하기에 앞서 만약 빠진 내용이나 잘못된 내용이 있다면 알려주시길바랍니다...

1. printf에 대해 알아보자

-C 언어 레퍼런스 - printf 함수-
-C 언어 코딩도장 서식 지정자-
-가변함수에 대해서-
위 내용을 토대로 정리를 할거라 한번씩 읽어보고 오면 좋을 것 같아요.

우리가 구현 할 ft_printf에서 가장 어려운 부분은 형식태그에 따라서 값이 계속 변하니 그 부분들을 처리하는게 엄청 많다는 겁니다...
진짜 계속 나와요.....
그렇기 때문에 위에 올려둔 링크에서 printf함수의 형식문자열인

%[플래그(flag)][폭(width)][.정밀도][크기(length)]서식 문자(specifier)

이 녀석들이 무엇을 의미하는지 확실하게 알아두고 갈 필요가 있습니다.

각 플래그, 폭, 정밀도, 크기등이 우리가 출력할 값에 어떤 영향을 주는지, 가변인자가 무엇인지, 어떻게 사용되는지는 이후 글에서 정리해보도록 할거라 우선은 printf가 어떻게 동작하는지 알아보고 직접 printf를 이렇게 저렇게 쳐 보면서 어떻게 출력이 되는지, 어떤 값이 문제가 될지 직접 경험해보도록 합시다.

2. 구현할 때 알아둬야 할 부분

1. 예외 및 에러처리를 할 함수들을 따로 만들어두자

  • 정말 태그 하나하나에 따라 값이 출력되고, 안되고, 반만출력되고 등등 처리해줘야 할 부분이 정말 많습니다.
    만약 구현 하면서 예외적인 부분이 하나 나올때마다 그 자리에서 수정하면 나중에 정말 복잡해지고 수정하기도 힘들어집니다. 그래서 한번 갈아엎고 하시는분도 많구요. 제가 그랬습니다
    그렇기 때문에 구조체를 잘 사용하면서 최대한 예외처리 부분을 같은 함수에 모아두도록 합시다. 그러면 수정하기가 몇 배는 편해집니다.

2. 오버플로우, 언더플로우에 대해서 알아두자.

  • 이 부분은 간단하게만 알아두고 넘어가도 될 것 같습니다. itoa_base에서 좀 더 편하게 숫자관리를 할 수 있는 등 알면 좋아요.
  • 하나의 itoa_base로 d, i, u, x, X에 보너스 파트인 l, ll, h, hh등을 처리할 수 있도록 도움을 줄 수 있습니다. <- 생각해보니 이건 크게 필요 없는것 같긴 해요. 구현하고나니 비효율적이고, gnl처럼 파일 갯수제한이 있는거도 아닌데 굳이? 라는 생각이 들어서..
    그런데 코드 한, 두줄만 다른데 그거 때문에 파일 한 두개 더 만드는게 좀 아깝기도 했고 한번 해 보면 파일 갯수는 확실히 줄어드는 것 같습니다.
    또 구현하면서 컴퓨터 내부에서 숫자들이 어떤 식으로 변하는지에 대해서 좀 더 잘 알게 된 것 같기도 하구요.
    그러니 알아두면 좋을 것 같습니다.

3. 간단한 보너스들이 있다.

  • 그냥 코드 몇 줄만 더 추가하면 되는 녀석들도 있고, 형 변환만 해줘도 되는 녀석들도 있습니다. n, l, ll, h, hh같은 녀석들이 그렇구요.
    아무튼 해 보면 좀 더 공부도 되고 나쁘진 않은 것 같습니다. 근데 블랙홀은 별로 안줌

0개의 댓글