ft_printf
๐Ÿ™‰

ft_printf

Created
Feb 7, 2023 08:31 AM
Last edited time
Last updated January 23, 2024
Tags
42
Language
C
URL
ย 
ย 
  • ๊ฐ€๋ณ€ ์ธ์ž๋ž€? printf(โ€%d %d %dโ€,1,2,3) ์—์„œ ์ธ์ž๋ฅผ ๋ช‡๊ฐœ๋ฅผ ๋„ฃ์–ด๋„ ์ž˜ ๋Œ์•„๊ฐ„๋‹ค. printf์˜ ํ”„๋กœํ† ํƒ€์ž…์„ ํ™•์ธํ•ด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
    • int printf(const char* format, ...)
      ์ด๋•Œ ๋‘๋ฒˆ์งธ ์ธ์ž๋กœ ์‚ฌ์šฉ๋˜๋Š” โ€ฆ ์ด ๊ฐ€๋ณ€์ธ์ž, ํ˜น์€ ๊ฐ€๋ณ€ ํŒŒ๋ผ๋ฏธํ„ฐ๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ๊ฒƒ์ด๋‹ค. ๋จผ์ € ๊ฐ€๋ณ€ ์ธ์ž ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š” stdarg.h ํ—ค๋”ํŒŒ์ผ์„ ํฌํ•จํ•ด์•ผํ•œ๋‹ค. ์ด ํ—ค๋” ํŒŒ์ผ์— ๊ฐ€๋ณ€์ธ์ž ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค ๋•Œ ํ•„์š”ํ•œ ๊ฐ์ข… ๋งคํฌ๋กœ ๋“ค์ด ์ •์˜๋˜์–ด ์žˆ๋‹ค. ๋˜ํ•œ ์ตœ์†Œ 1๊ฐœ ์ด์ƒ์˜ ๊ณ ์ •์ธ์ˆ˜ ๊ฐ€ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
      1. va_list : ๊ฐ ๊ฐ€๋ณ€ ์ธ์ž์˜ ์‹œ์ž‘ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ํฌ์ธํ„ฐ ์ด๋‹ค.
      1. va_start : va_list๋กœ ๋งŒ๋“ค์–ด์ง„ ํฌ์ธํ„ฐ์—์„ธ ๊ฐ€๋ณ€์ธ์ž ์ค‘ ์ฒซ๋ฒˆ์งธ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฅด์ณ์ฃผ๋Š” ๋งคํฌ๋กœ์ด๋‹ค.
        1. #define va_start(ap, v) ( (ap) = (va_list)_ADDRESSOF(v) + _INTSIZEOF(v) )
          _ADDRESSOF(v) โ‡’ &(v), ์ฃผ์†Œ๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ๋งคํฌ๋กœ ์ด๋‹ค.
          _INTSIZEOF(n) => ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1) ), ๋น„ํŠธ ์—ฐ์‚ฐ์ด ๋“ค์–ด๊ฐ€๋Š”๋ฐ ์ž์„ธํ•œ ๊ณ„์‚ฐ๊นŒ์ง€๋Š” ์•Œ ํ•„์š” ์—†์Šต๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰ ๊ณ ์ •์ธ์ˆ˜์˜ ์‚ฌ์ด์ฆˆ๋ฅผ ๊ตฌํ•ด์„œ ๊ทธ ๋‹ค์Œ ์ธ์ž์˜ ์‹œ์ž‘์ฃผ์†Œ. ์ฆ‰, ๊ฐ€๋ณ€์ธ์ž์˜ ์‹œ์ž‘์ฃผ์†Œ๊นŒ์ง€์˜ ๋ฉ”๋ชจ๋ฆฌ์ƒ์˜ย ๊ฑฐ๋ฆฌย ๋ฅผ ๊ตฌํ•ด์ฃผ๋Š” ๋งคํฌ๋กœ์ž…๋‹ˆ๋‹ค.
      ย 
      1. va_arg : ํŠน์ • ๊ฐ€๋ณ€์ธ์ž๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” va_list์˜ ํฌ์ธํ„ฐ๋ฅผ ๋‹ค์Œ ๊ฐ€๋ณ€์ธ์ž๋กœ ์ด๋™์‹œ์ผœ ์ฃผ๋Š” ๋งคํฌ๋กœ์ด๋‹ค.
        1. #define va_arg(ap,t) ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )
          ๋”ํ•œ๋‹ค์Œ ๊ทธ๋Œ€๋กœ ๋‹ค์‹œ ๋นผ์ฃผ๋Š” ์ด์œ ๋Š” ap๊ฐ’์„ ๋ณ€ํ™”์‹œํ‚ค๊ณ  ๋ณ€ํ™”์‹œํ‚ค์ง€ ์•Š์œผ๋ฉฐ ๊ฐ’์„ ๋ฆฌํ„ดํ•ด์ฃผ๊ธฐ ์œ„ํ•ด์„œ์ด๋‹ค.
      1. va_end : ์‚ฌ์šฉํ•œ ๊ฐ€๋ณ€์ธ์ž ๋ณ€์ˆ˜๋ฅผ ๋๋‚ผ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
        1. #define va_end(ap) ( ap = (va_list)0 )
format %c
๋‹จ์ˆœํžˆ writeํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ va_arg(c,int)๋กœ ๋ฐ›์€ ์ธํŠธํ˜• ๊ฐ’์„ ์ถœ๋ ฅํ•ด์ฃผ๋ฉด ๋œ๋‹ค. ๋ฆฌํ„ด์€ ์ถœ๋ ฅํ•œ ๊ธธ์ด๋ฅผ ํ•ด์ฃผ๋ฉด ๋˜๋Š”๋ฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”์ด์ƒ 1์„ ๋ฆฌํ„ดํ•ด์ฃผ๋ฉด ๋œ๋‹ค.
format %s
c ์™€ ๋น„์Šทํ•˜๊ฒŒ
format %i && %d
8์ง„๋ฒ• ํ‘œ๊ธฐ 011 โ‡’ 9
10์ง„๋ฒ• ํ‘œ๊ธฐ 011 โ‡’ 11
16์ง„๋ฒ• ํ‘œ๊ธฐ 0x011 โ‡’ 17
format %u
ย 

Loading Comments...