ft_printf()를 구현하기 전에 C언어의 표준 입출력 함수 printf() 함수를 알아보자.
C를 배우고 난 뒤로 가장 많이 사용한 함수일텐데 함수의 서식이나 원리를 따로 공부하지는 않았다. 막연하게 출력하는 함수라고만 알고 있었기 때문에 누군가 "printf() 함수가 뭔데?" 라고 물어보면 한마디로 설명할 수가 없어서 리눅스에 printf()에 대해서 물어봤다.
man printf
정리하자면 printf()는 여러 데이터를 다양한 형식에 맞추어 출력하는 함수이다. 매뉴얼의 시놉시스를 보면 함수를 아래와 같이 표현한다.
printf format [arguments ... ]
위의 format 부분에는 단순 문자열(plain characters), 이스케이프 시퀀스(character escape sequence), 형식 지정자(format specifier)가 포함되는데 아래에서 순서대로 살펴보자.
단순 문자열 (plain characters)
리터럴리 단순 문자열이다.
printf("Welcome to Billy's Blog");
위와 같은 코드처럼 문자열을 출력하고 싶은 경우, 별도의 추가 인수 없이 string을 의미하는 큰 따옴표("") 안에 출력하고자 하는 내용을 넣어주면 된다.
이스케이프 시퀀스 (character escape sequence)
문자 그대로 출력되는 것이 아니라 특수한 목적으로 사용되는 문자열을 의미하며, 특정 문자 앞에 백슬래시(\)를 붙여 사용한다. 이스케이프 시퀀스는 문자열이 아닌 일종의 실행 명령어로 기능한다. 대표적인 예로 개행 문자인 "\n"을 들 수 있다.
printf("Welcome to Billy's Blog\n Hello!");
위와 같은 코드의 경우, \n이 문자열로 인식되지 않고 개행을 하라는 명령어로 인식되어 출력값이 아래처럼 나타난다.
Welcome to Billy's Blog
Hello!
형식 지정자 (format specifier)
printf()함수에 붙은 f는 "formatted"를 의미한다. 형식화, 즉 formatting을 해준다는 것인데 이 형식은 사용자가 format specifier(형식 지정자)를 이용하여 직접 지정할 수 있다. 모든 형식 지정자는 앞에 퍼센트 문자 (%)를 달고 나온다. printf() 함수를 사용할 때 자주 접하던 %d, %f, %s 등의 문자가 바로 형식 지정자이다.
printf("오늘은 집에 %d시에 갈 것이다.", 7);
위의 코드에서는 %d가 서식 지정자로 사용되었다. C에서 %d는 signed 10진 정수의 형식 지정자로 사용된다.
ft_printf() 함수를 구현할 때에 형식 지정자는 아래와 같은 규칙에 따라야 한다.
• %c : 단일 문자를 인쇄합니다.
• %s : 일반적인 C 규칙에 의해 정의된 문자열을 인쇄합니다.
• %p : void * 포인터 인수는 16진수 형식으로 인쇄해야 합니다.
• %d : 10진수를 인쇄합니다.
• %i : 10진 정수를 인쇄합니다.
• %u : 부호가 없는 (unsigned) 10진수를 인쇄합니다.
• %x : 숫자를 16진수 소문자 형식으로 인쇄합니다.
• %X : 숫자를 16진수 대문자 형식으로 인쇄합니다.
• %% : 퍼센트 기호(%)를 인쇄합니다.
이외 조건들
ft_printf()를 구현하기 위해 필요한 기타 조건들은 다음과 같다.
• 오리지널 printf()의 버퍼 관리를 구현하지 마십시오.
• 당신의 함수는 다음과 같은 변환을 처리해야 합니다: cspdiuxX%
• 당신의 함수는 오리지널 printf()와 비교될 것입니다.
• ar 명령어를 사용하여 라이브러리를 만들어야 합니다. libtool 명령을 사용하는 것은 금지되어 있습니다.
• 레포지토리의 루트에 libftprintf.a를 만들어야 합니다.
'42' 카테고리의 다른 글
[C] 정적변수란? - 지역변수, 전역변수 비교 (0) | 2024.02.08 |
---|---|
[C] printf() 구현하기 - 가변 인수 함수란? (0) | 2023.12.16 |