๊ฐ๋ณ ์ธ์ ํจ์ va_start
, va_arg
, va_copy
, va_end
๊ฐ๋ณ ์ธ์ ํจ์๋ ์ธ์ ๊ฐ์๊ฐ ๊ณ ์ ๋์ด ์์ง ์๊ณ ํ์ํ ๋งํผ ๋๊ธธ ์ ์๋ ํจ์์ด๋ค.
๋ํ์ ์ผ๋ก, printf
ํจ์๊ฐ ์๋ค.
printf("ํฉ์ %d์
๋๋ค\n", a + b);
printf("%s %d %f\n", "์ซ์:", 3, 2.5);
- va_start(ap, param): ๊ฐ๋ณ ์ธ์ ์ฒ๋ฆฌ๋ฅผ ์์ํ ๋ ํธ์ถํ๋ค.
ap
๋va_list
ํ์ ๋ณ์,param
์ ๊ณ ์ ์ธ์ ์ค ๋ง์ง๋ง ์ธ์์ด๋ค. - va_arg(ap, type): ์ธ์ ํ๋๋ฅผ ๊ฐ์ ธ์ฌ ๋ ์ฌ์ฉํ๋ค.
ap
์์ ํ๋ ๊บผ๋ด๊ณ , ๊ทธ ๋ค์ ๊ฑธ ๊ฐ๋ฆฌํค๊ฒ ์ด๋ํ๋ค. - va_copy(dest, src):
va_list
๋ฅผ ๋ณต์ฌํ ๋ ์ฌ์ฉํ๋ค. ๊ฐ์ ์ธ์ ๋ฆฌ์คํธ๋ฅผ ๋ ๋ฒ ์ฝ์ด์ผ ํ ๋ ์ฌ์ฉํ๋ค. - va_end(ap): ๊ฐ๋ณ ์ธ์ ์ฒ๋ฆฌ๋ฅผ ๋๋ผ ๋ ํธ์ถํ๋ค. ๋ฉ๋ชจ๋ฆฌ ์ ๋ฆฌ๋ฅผ ๋์์ค๋ค.
#include <stdio.h>
#include <stdarg.h> // ์ด๊ฑฐ ๊ผญ ํ์!
// ์ซ์๋ฅผ n๊ฐ ๋ฐ์์ ํฉ์น๋ ํจ์
int sum(int count, ...)
{
va_list ap; // ๊ฐ๋ณ ์ธ์๋ฅผ ๊ด๋ฆฌํ ๋ณ์
int result = 0;
va_start(ap, count); // ๊ฐ๋ณ ์ธ์ ์์ (count ๋ค์ ์ธ์๋ถํฐ ์ฝ๊ฒ ๋ค๋ ๋ป)
for (int i = 0; i < count; i++) {
result += va_arg(ap, int); // ์ธ์๋ฅผ ํ๋ ์ฝ์ด์ ๋ํจ (์๋ฃํ ๋ฐ๋์ ๋ช
์)
}
va_end(ap); // ๊ฐ๋ณ ์ธ์ ๋
return result;
}
int main()
{
printf("%d\\n", sum(3, 10, 20, 30)); // ์ถ๋ ฅ: 60
printf("%d\\n", sum(5, 1, 2, 3, 4, 5)); // ์ถ๋ ฅ: 15
return 0;
}
va_list ap
์ ์ธva_start(ap, ๋ง์ง๋ง ๊ณ ์ ์ธ์)
ํธ์ถva_arg(ap, ํ์ )
์ผ๋ก ์ธ์ ํ๋์ฉ ์ฝ์- ๋ค ์ฝ๊ณ ๋๋ฉด
va_end(ap)
ํธ์ถ
์ฐธ๊ณ ์๋ฃ