printf와 putstr으로는 만족할 수 없기 때문에
요약 : 이 프로젝트는 꽤 단순합니다. 여러분은 printf 함수를 직접 구현하시면 됩니다. 희망컨대 여러분들은 cheater로 지목될 수 있다는 두려움 없이 추후 프로젝트에서 이것을 재활용할 수 있습니다.
여러분은 주로 가변 인자 (variadic arguments) 를 사용하는 방법에 대해 배울 것입니다.
Chapter | Contents | page |
---|---|---|
1 | Introduction | 2 |
2 | Common Instructions | 3 |
3 | Mandatory part | 4 |
4 | Bonus part | 5 |
C
에서 printf
함수의 다재다능함은 프로그래밍에 있어 우리에게 훌륭한 연습이 됩니다. 이 프로젝트는 중간 정도의 난이도를 가지며, 여러분들이 C
에서 가변 함수들을 배울 수 있도록 도와줍니다.
성공적인 ft_printf
의 핵심은 체계적이고 확장성 있는 코드입니다.
-
프로젝트는 Norm 규칙에 맞춰 작성되어야 합니다. 보너스 파일/함수가 존재할 경우, 그 또한 norm 검사에 포함되며 norm error가 있을 시 0점을 받게 됩니다.
-
함수들은 정의되지 않은 행동들과 별개로 예기치 않게 중단되어서는 안 됩니다.(예를 들어, segmentation fault, bus error, double free 등) 만약 이렇게 중단되면, 당신의 프로젝트는 작동하지 않는 것으로 여겨지고 평가에서 0점을 받을 것입니다.
-
필요한 경우 heap에 할당된 모든 메모리 공간은 적절하게 해제되어야 합니다. 메모리 누수는 용납되지 않습니다.
-
과제에서 필요한 경우,
-Wall -Wextra -Werror
플래그를 지정하여 컴파일을 수행하는Makefile
을 제출해야 합니다. Makefile은 relink 되어서는 안 됩니다. -
Makefile
은 최소한$(NAME), all, clean, fclean, re
규칙을 포함해야 합니다. -
프로젝트에 보너스를 제출하려면, Makefile에
보너스 규칙
을 포함해야 합니다. 이 보너스 규칙은 프로젝트의 메인 파트에서 금지되었던 모든 다양한 헤더, 라이브러리, 또는 함수들을 추가하여야 합니다. 보너스 과제는 반드시 _bonus
.{c/h}라는 별도의 파일에 있어야 합니다. 반드시 수행하여야 하는 메인 파트의 평가와 보너스 파트의 평가는 별도로 이뤄집니다. -
만일 프로젝트에서 여러분의
libft
사용을 허용한다면, 소스들과 관련Makefile
을 함께 루트 폴더 안에 있는libft
폴더에 복사해야 합니다. 프로젝트의Makefile
은 우선 libft의Makefile
을 사용하여 라이브러리를 컴파일한 다음, 프로젝트를 컴파일해야 합니다. -
이 과제물을 제출할 필요가 없고, 채점 받을 필요가 없을지라도, 저희는 여러분들이 프로젝트를 위한 테스트 프로그램을 만들 것을 권장합니다. 이것은 여러분의 과제물과 동료들의 과제물을 쉽게 테스트할 수 있게 도울 것입니다. 또한, 평가를 진행할 때 이러한 테스트 프로그램들이 특히 유용하다는 사실을 알게 될 것입니다. 평가 시에는 여러분의 테스트 프로그램과 평가 받는 동료의 테스트 프로그램들을 당연히 자유롭게 사용할 수 있습니다.
-
할당된 git 저장소에 과제물을 제출하세요. 오직 git 저장소에 있는 과제물만 등급이 매겨질 것입니다. Deepthought가 평가하는 과제의 경우엔, 동료평가 이후에 Deepthought가 수행됩니다. 만약 Deepthought 평가 중에 오류가 발생한다면, 그 즉시 평가는 중지될 것입니다.
프로그램 이름 | libftprintf.a |
---|---|
제출할 파일 | *.c, */*.c, *.h, */*.h, Makefile |
Makefile 규칙 | all, clean, fclean, re, bonus |
사용가능한 외부 함수 |
malloc, free, write, va_start, va_arg, va_copy, va_end |
직접 만든 libft | 사용 가능 |
설명 | 실제 printf의 동작을 모방한 ft_printf를 포함하는 라이브러리를 작성하세요. |
-
ft_printf의 프로토타입은
int ft_printf(const char *, ...);
이어야 합니다. -
여러분은
libc
의printf
함수를 재구현해야 합니다. -
실제
printf
처럼 버퍼 관리를 수행해서는 안 됩니다. -
다음 서식 지정자를 구현하세요 :
cspdiuxX%
-
다음 플래그들과, 각 서식 지정자의 최소 폭을 포함한 모든 조합을 구현하여야 합니다 :
-0.*
-
실제 printf와 비교하여 채점할 것입니다.
-
ar
명령어를 이용하여 라이브러리를 만들어야 합니다.libtool
을 사용하는 것은 금지됩니다.
⚠
man 3 printf / man 3 stdarg
-
필수 구현 파트가 완벽하지 않으면, 보너스는 생각도 하지 마세요.
-
모든 보너스를 구현할 필요는 없습니다.
-
다음 서식 지정자 중 한 개 이상을 구현하세요 :
nfge
-
다음 플래그 중 한 개 이상을 구현하세요 :
l ll h hh
-
다음 플래그를 모두 구현하세요 :
'# +'
(맞아요, 한 개는 공백이에요)