ย
ย
- ๊ฐ๋ณ ์ธ์๋? printf(โ%d %d %dโ,1,2,3) ์์ ์ธ์๋ฅผ ๋ช๊ฐ๋ฅผ ๋ฃ์ด๋ ์ ๋์๊ฐ๋ค. printf์ ํ๋กํ ํ์ ์ ํ์ธํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
int printf(const char* format, ...)
์ด๋ ๋๋ฒ์งธ ์ธ์๋ก ์ฌ์ฉ๋๋ โฆ ์ด ๊ฐ๋ณ์ธ์, ํน์ ๊ฐ๋ณ ํ๋ผ๋ฏธํฐ๋ผ๊ณ ๋ถ๋ฆฌ๋ ๊ฒ์ด๋ค.
๋จผ์ ๊ฐ๋ณ ์ธ์ ํจ์๋ฅผ ๋ง๋ค๊ธฐ ์ํด์๋ stdarg.h ํค๋ํ์ผ์ ํฌํจํด์ผํ๋ค. ์ด ํค๋ ํ์ผ์ ๊ฐ๋ณ์ธ์ ํจ์๋ฅผ ๋ง๋ค ๋ ํ์ํ ๊ฐ์ข
๋งคํฌ๋ก ๋ค์ด ์ ์๋์ด ์๋ค. ๋ํ ์ต์ 1๊ฐ ์ด์์ ๊ณ ์ ์ธ์ ๊ฐ ์์ด์ผ ํ๋ค.
- va_list : ๊ฐ ๊ฐ๋ณ ์ธ์์ ์์ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํฌ ํฌ์ธํฐ ์ด๋ค.
- va_start : va_list๋ก ๋ง๋ค์ด์ง ํฌ์ธํฐ์์ธ ๊ฐ๋ณ์ธ์ ์ค ์ฒซ๋ฒ์งธ ์ฃผ์๋ฅผ ๊ฐ๋ฅด์ณ์ฃผ๋ ๋งคํฌ๋ก์ด๋ค.
#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) ), ๋นํธ ์ฐ์ฐ์ด ๋ค์ด๊ฐ๋๋ฐ ์์ธํ ๊ณ์ฐ๊น์ง๋ ์ ํ์ ์์ต๋๋ค. ๋ง์ง๋ง ๊ณ ์ ์ธ์์ ์ฌ์ด์ฆ๋ฅผ ๊ตฌํด์ ๊ทธ ๋ค์ ์ธ์์ ์์์ฃผ์. ์ฆ, ๊ฐ๋ณ์ธ์์ ์์์ฃผ์๊น์ง์ ๋ฉ๋ชจ๋ฆฌ์์ย ๊ฑฐ๋ฆฌย ๋ฅผ ๊ตฌํด์ฃผ๋ ๋งคํฌ๋ก์
๋๋ค.
ย
- va_arg : ํน์ ๊ฐ๋ณ์ธ์๋ฅผ ๊ฐ๋ฆฌํค๋ va_list์ ํฌ์ธํฐ๋ฅผ ๋ค์ ๊ฐ๋ณ์ธ์๋ก ์ด๋์์ผ ์ฃผ๋ ๋งคํฌ๋ก์ด๋ค.
#define va_arg(ap,t) ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )
๋ํ๋ค์ ๊ทธ๋๋ก ๋ค์ ๋นผ์ฃผ๋ ์ด์ ๋ ap๊ฐ์ ๋ณํ์ํค๊ณ ๋ณํ์ํค์ง ์์ผ๋ฉฐ ๊ฐ์ ๋ฆฌํดํด์ฃผ๊ธฐ ์ํด์์ด๋ค.
- va_end : ์ฌ์ฉํ ๊ฐ๋ณ์ธ์ ๋ณ์๋ฅผ ๋๋ผ๋ ์ฌ์ฉํ๋ค.
#define va_end(ap) ( ap = (va_list)0 )
- ๋ฐ์ดํธ ํจ๋ฉ(Byte Padding)
ํด๋์ค(๊ตฌ์กฐ์ฒด)์ ๋ฐ์ดํธ๋ฅผ ์ถ๊ฐํด CPU์ ๊ทผ์ ๋ถํ๋ฅผ ๋์ด์ฃผ๋ ๊ธฐ๋ฒ์ด๋ค.
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...