C stdarg.h - sonkoni/Koni-Wiki GitHub Wiki
๋งค๊ฐ๋ณ์์ ๊ฐ๋ณ์ธ์ ์ง์
== Type ==
va_list ~ ๊ฐ๋ณ์ธ์ ๋ชฉ๋กํ์
. ์ด ํ์
์ผ๋ก ๋ง๋ ๋ณ์์ ๊ฐ๋ณ์ธ์์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ ์ฅํ๋ค.
์ฌ๊ธฐ์์ intํ๊ณผ charํ, doubleํ๊ณผ floatํ์ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ๋ก ์ฝ์ด์ค๊ฒ ๋๋ค.
์ด ๋ถ๋ถ์ va_arg ๋งคํฌ๋ก์ size ๊ณ์ฐ๋ฒ์ ์ํด ๋์ํ๋ฉฐ, ํจ์จ์ ์ํด 4๋ฐ์ดํธ ๋จ์์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉํ๋ ๊ฒ์ผ๋ก ๋ณด์ธ๋ค.
== Macro ==
void va_start(va_list ap, args); ~ ๋ณ์ ap์ ๋ชฉ๋ก์ ๋ฐ์์์ args ๋ณ์๋ก ๋๊ธฐ๊ธฐ๋ฅผ ์์ํ๋ค.
T va_arg(va_list ap, T); ~ ์์ args ๋ณ์์์ T ํ์
์ผ๋ก ํฌ์ธํฐ ์ฐ์ฐ์ ํด์ ๋ค์ ์์น๋ฅผ ๊ธฐ์ต์ํค๊ณ ํด๋น ์ฃผ์๋ฅผ ๋ฐํํ๋ค.
void va_copy(va_list dest, va_list src); ~ dest ๋ก src ๋ฅผ ๋ณต์ฌํ๋ค.
void va_end(va_list ap); ~ ๊ฐ๋ณ์ธ์ ap ๋ฅผ ๋๋ธ๋ค.#include <stdio.h>
#include <stdarg.h>
void printNumbers(int args, ...) {
va_list ap; // ๊ฐ๋ณ ์ธ์ ๋ชฉ๋ก ํฌ์ธํฐ. argument pointer
va_start(ap, args);
for (int i = 0; i < args; i++) {
int num = va_arg(ap, int); // ํฌ์ธํฐ ์ฐ์ฐ์ ํด์ ๊ฐ์ ๋ฐํํ๊ณ ์์น๋ฅผ ๊ธฐ์ตํ๋ค
printf("%d ", num);
}
va_end(ap);
printf("\n");
}
int main(int argc, char *argv[]) {
printNumbers(1, 1);
printNumbers(2, 1, 2);
printNumbers(3, 1, 2, 3);
printNumbers(4, 1, 2, 3, 4);
return 0;
}
// 1
// 1 2
// 1 2 3
// 1 2 3 4