๐ก
ft_printf ๋ณธ๋ฌธ
์ฌ์ ์ง์
- ๊ฐ๋ณ ์ธ์
- printf ์ ์ ์๋ฅผ ๋ณด๋ฉด (man 3 printf) int printf(const char * restrict format, ...); ์ผ๋ก ๋์ด์๋ค
์ฌ๊ธฐ์ '...' ์ '๊ฐ๋ณ์ธ์'๋ผ๊ณ ๋ถ๋ฅธ๋ค.
- ์ธ์์ ๊ฐ์์ ํ์ ์ด ๋ฏธ๋ฆฌ ์ ํด์ ธ ์์ง ์๋ค๋ ์๋ฏธ๋ก ๋๋ต์ ์ธ ๊ตฌ์กฐ๋ ์๋์ ๊ฐ๋ค.
#include <stdarg.h>
void foo(int a, ...)
{
va_list ap;
va_start(ap, a)
while ( ๋ชจ๋ ์ธ์๋ฅผ ์ฝ์ ๋ ๊น์ง)
{
va_arg(ap, ์ธ์ ํ์
);
}
va_end(ap);
}
- va_list ap: ๊ฐ๋ณ์ธ์์ ๋ชฉ๋ก. ๊ฐ๋ณ์ธ์์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ ์ฅํ๋ ํฌ์ธํฐ์ด๋ค
- va_start(ap, a) : va_list ๋ก ๋ง๋ค์ด์ง ์ธ์ ๋ชฉ๋ก์ ์ฒซ ๋ฒ์งธ ์ธ์ ๋ฐ๋ก ์์ ์ค๋ ํ์ ๋งค๊ฐ๋ณ์ (a)๋ฅผ ์ค์ ํด์ฃผ๊ณ , ap์ ์ฃผ์๋ฅผ ๊ฐ๋ฅด์ณ ์ค๋ค
- va_arg(ap, ์ธ์ ํ์ ) : ap์ ์ง์ ๋ ์์น์์ ์ธ์ ํ์ ์ ๊ฐ๋งํผ ๊ฒ์ํ๊ณ ๋ค์ ๋ชฉ๋ก์ ๊ฐ๋ฆฌํค๋๋ก ap๋ฅผ ์ธ์ ํ์ ์ ๊ฐ๋งํผ ์ฆ๊ฐ์ํจ๋ค
* ๊ณผ์ ์์ ์ ์ํ ์๋ฃํ
c : int
s : char *
p : void *
d : int
i : int
u : unsigned int
x(X) : unsigned int
๋ก ์๋ฃํ์ ์ง์ ํด์ผํ๋ค.
- va_end : ๋ชจ๋ ์ธ์๋ฅผ ๊ฒ์ํ ํ ํฌ์ธํฐ๋ฅผ NULL๋ก ์ค์ ํ๋ค
- va_arg ๋ ํ์ ์ธ์๋ฅผ ๋ฆฌํด, ๋๋จธ์ง๋ ๊ฐ์ ๋ฆฌํดํ์ง ์๋๋ค.
์๊ฐ๊ฑฐ๋ฆฌ
- ๊ฐ ์๋ฃํ๋ณ ํ์ฑ
์ฒ์์๋ ๋ชจ๋ ํ๋๊ทธ์ ์ต์ ์ ์ ๋ฆฌํ ํ์ ๋์ ํ ๋นํด์ ํ๋ฒ์ ๋ชจ๋ ํ๋๊ทธ์ ์ต์ ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ผ๋ก ํ์ฑํ์๋๋ฐ
precision ๊ณผ width ๋ค์ด ์์ธ์ํฉ์ด ๋๋ฌด ๋ง์์ ๊ฒฐ๊ตญ ๋ฌธ์์ด ๋ฐ๋ก ๊ณต๋ฐฑ or '0' ๋ฐ๋ก ๋์ ํ ๋น ํด์ strjoin์ผ๋ก ํฉ์ณ์ฃผ๋ ๋ฐฉ์์ผ๋ก ์ ํํ๋ค.
- ์์ธ ์ฒ๋ฆฌ
get_next_line ๋ณด๋ค ์ ์ฒด์ ์ธ ํ๋ฆ์ด ์ด๋ ต์ง ์์์ง๋ง ์ผ์ด์ค๊ฐ ๋ง๊ณ ์์ธ์ํฉ์ด ๋ง์์ ํจ์๊ฐ ๋ง์์ง๊ณ ๋ณต์กํด์ง๊ฑฐ ๊ฐ๋ค
์ ๋ฐ๋์ '0'flag '-'flag ์ ๊ด๊ณ, %s ์ผ๋ NULL์ด ๋ค์ด์์ ๋, d, i, u, x, X, p ์์ ์ ๋ฐ๋๊ฐ 0์ด๊ณ 0์ด ๋ค์ด์์๋ ๋ฑ๋ฑ... ์๊ฐ๋๋ ์์ธ์ฒ๋ฆฌ๊ฐ ๋ง๋ค.
- undefined behavior
๊ธฐ์กด์ ์กด์ฌํ๋ ํจ์๋ฅผ ์ฌํํด์ผ ํ๋ค๋ณด๋ printf ์์ undefined behavior ์ธ ์ํฉ๋ค์ ๊ณ ๋ คํ์ง ๋ง์!
์ด ์ํฉ๋๋ฌธ์ ํ๋ฃจ์ ์ ๋ฐ์ ๋ ๋ ค๋จน์๋ค.
- free()
๋์ ํ ๋น ํ๊ณ ๋ค ์ฌ์ฉํ ํ์๋ ๊ผญ ํด์ ํ์ ์์ง๋ง๊ณ ๋๋ฒ ๋ณด๊ณ ์ธ๋ฒ ๋ณด์
'42' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
FdF (0) | 2021.11.30 |
---|---|
push_swap (0) | 2021.07.15 |
Born2beroot (2) | 2021.06.04 |
get_next_line (0) | 2021.05.13 |