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
โš ๏ธ **GitHub.com Fallback** โš ๏ธ