Skip to content

Latest commit

Β 

History

History
107 lines (61 loc) Β· 5.81 KB

File metadata and controls

107 lines (61 loc) Β· 5.81 KB

printf

printf와 putstrμœΌλ‘œλŠ” λ§Œμ‘±ν•  수 μ—†κΈ° λ•Œλ¬Έμ—

μš”μ•½ : 이 ν”„λ‘œμ νŠΈλŠ” κ½€ λ‹¨μˆœν•©λ‹ˆλ‹€. μ—¬λŸ¬λΆ„μ€ printf ν•¨μˆ˜λ₯Ό 직접 κ΅¬ν˜„ν•˜μ‹œλ©΄ λ©λ‹ˆλ‹€. ν¬λ§μ»¨λŒ€ μ—¬λŸ¬λΆ„λ“€μ€ cheater둜 μ§€λͺ©λ  수 μžˆλ‹€λŠ” 두렀움 없이 μΆ”ν›„ ν”„λ‘œμ νŠΈμ—μ„œ 이것을 μž¬ν™œμš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ—¬λŸ¬λΆ„μ€ 주둜 κ°€λ³€ 인자 (variadic arguments) λ₯Ό μ‚¬μš©ν•˜λŠ” 방법에 λŒ€ν•΄ 배울 κ²ƒμž…λ‹ˆλ‹€.


Contents

Chapter Contents page
1 Introduction 2
2 Common Instructions 3
3 Mandatory part 4
4 Bonus part 5

Chapter 1

Goals


Cμ—μ„œ printf ν•¨μˆ˜μ˜ λ‹€μž¬λ‹€λŠ₯함은 ν”„λ‘œκ·Έλž˜λ°μ— μžˆμ–΄ μš°λ¦¬μ—κ²Œ ν›Œλ₯­ν•œ μ—°μŠ΅μ΄ λ©λ‹ˆλ‹€. 이 ν”„λ‘œμ νŠΈλŠ” 쀑간 μ •λ„μ˜ λ‚œμ΄λ„λ₯Ό κ°€μ§€λ©°, μ—¬λŸ¬λΆ„λ“€μ΄ Cμ—μ„œ κ°€λ³€ ν•¨μˆ˜λ“€μ„ 배울 수 μžˆλ„λ‘ λ„μ™€μ€λ‹ˆλ‹€.

성곡적인 ft_printf의 핡심은 체계적이고 ν™•μž₯μ„± μžˆλŠ” μ½”λ“œμž…λ‹ˆλ‹€.


Chapter 2

Common Instructions

  • ν”„λ‘œμ νŠΈλŠ” 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 평가 쀑에 였λ₯˜κ°€ λ°œμƒν•œλ‹€λ©΄, κ·Έ μ¦‰μ‹œ ν‰κ°€λŠ” 쀑지될 κ²ƒμž…λ‹ˆλ‹€.


Chapter 3

Mandatory part

ν”„λ‘œκ·Έλž¨ 이름 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

Chapter 4

Bonus part


  • ν•„μˆ˜ κ΅¬ν˜„ νŒŒνŠΈκ°€ μ™„λ²½ν•˜μ§€ μ•ŠμœΌλ©΄, λ³΄λ„ˆμŠ€λŠ” 생각도 ν•˜μ§€ λ§ˆμ„Έμš”.

  • λͺ¨λ“  λ³΄λ„ˆμŠ€λ₯Ό κ΅¬ν˜„ν•  ν•„μš”λŠ” μ—†μŠ΅λ‹ˆλ‹€.

  • λ‹€μŒ μ„œμ‹ μ§€μ •μž 쀑 ν•œ 개 이상을 κ΅¬ν˜„ν•˜μ„Έμš” : nfge

  • λ‹€μŒ ν”Œλž˜κ·Έ 쀑 ν•œ 개 이상을 κ΅¬ν˜„ν•˜μ„Έμš” : l ll h hh

  • λ‹€μŒ ν”Œλž˜κ·Έλ₯Ό λͺ¨λ‘ κ΅¬ν˜„ν•˜μ„Έμš” : '# +' (λ§žμ•„μš”, ν•œ κ°œλŠ” κ³΅λ°±μ΄μ—μš”)