1편에서는 ft_printf와 관련된 함수들의 사용법에 대해서 간단하게 살펴봤다.
va_list ap; 는 가변변수를 가리킬 ap 포인터를 선언하는 것이었고,
va_start(ap, str); 은 ap가 str 개수 만큼 무언가를 가리킬 것을 의미했다.
something = va_args(ap, sizeof(something));
은 ap가 가리키는 곳부터 something의 사이즈만큼 메모리를 담는 것이었다.
이번 파트에서 알아볼 것은 Printf를 본격적으로 구현하기 전에
알아야 할 또 하나의 필수적인 파트다.
그것은 영어로 format specifier라고 불리는 서식 지정자이다.
printf("%u\n", 10); // 10: 부호 없는 10진 정수
printf("%d\n", -20); // -20: 부호 있는 10진 정수
printf("%i\n", -20); // -20: 부호 있는 10진 정수
printf("%o\n", 071); // 71: 부호 없는 8진 정수
printf("%x\n", 0xF1); // f1: 부호 없는 16진 정수(소문자)
printf("%X\n", 0xF1); // F1: 부호 없는 16진 정수(대문자)
printf("%c\n", 'a'); // a: 문자
printf("%s\n", "Hello, world!"); // Hello, world!: 문자열
// 포인터
int num1;
void *ptr = &num1;
printf("%p\n", ptr); // 008BFB6C: 포인터의 메모리 주소
// 0x8bfb6c: 리눅스, OS X에서는 앞에 0x가 붙고, A~F는 소문자로 출력
// 높은 자릿수의 0은 생략
// % 기호
printf("%%\n"); // %: % 기호 출력
(위 예제는 c언어 코딩 도장 85.2를 참고했다.https://dojang.io/mod/page/view.php?id=736)
'%[flags][width][.precision]서식지정자'
형식을 가짐을 이해하자.
더 자세한 설명은 위 주석에 링크된 블로그에 나와 있다.
본격적으로 ft_printf 코딩을 시작해보자.
프로토 타입은 다음과 같다.
int ft_printf(char const *str, ...)
// ...은 가변변수
3편에서 계속
'Code 42 > ft_printf' 카테고리의 다른 글
printf 재구현하기 part3. pseudo-code (0) | 2020.06.29 |
---|---|
printf 재구현하기 (feat. va_list, va_arg, va_start, va_end) - 1 (0) | 2020.03.02 |
최근댓글