Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

nomad-programmer

[Programming/C] 가변 인자 함수 본문

Programming/C

[Programming/C] 가변 인자 함수

scii 2020. 6. 18. 01:49

가변 개수의 인자를 받는 함수를 가변 인자 함수(Variadic Function)라고 한다. C 표준 라이브러리에는 직접 가변 인자 함수를 만들 수 있게 도와주는 여러 매크로(Macro)를 포함하고 있다. 

#include <stdio.h>
// 가변 인자 함수를 정의하려면 stdarg.h 파일을 인클루드해야 한다.
#include <stdarg.h>

// 가변 인자 함수
int print_ints(int args, ...){
    int tmp;
    int sum = 0;
    va_list ap;
    // 어디에서부터 가변 인자가 시작되는지 알려준다.
    va_start(ap, args);
    // 모든 가변 인자 출력
    for(int i=0; i<args; i++){
        tmp = va_arg(ap, int);
        sum += tmp;
        printf("argument: %d\n", tmp);
    }
    // va_end 매크로를 호출하면 가변 인자를 다 읽었다고 알려준다.
    va_end(ap);
    return sum;
}

int main(void) {
    int result = 0;
    // 첫 번째 인자는 고정 인자이다. 가변 인자가 몇개인지 전달한다.
    result = print_ints(5, 12, 15, 18, 20, 100);

    puts("");
    printf("total: %d\n", result);

    return 0;
}

// 결과
/*

argument: 12
argument: 15
argument: 18
argument: 20
argument: 100

total: 165

*/

 

정리

* 가변 개수 인자를 받는 함수를 가변 인자 함수라고 한다.

* 가변 인자 함수를 만드려면 stdarg.h 헤더 파일을 인클루드해야 한다.

* 가변 인자는 va_list에 저장된다.

* va_start(), va_arg(), va_end() 매크로를 사용해 va_list를 제어할 수 있다.

* 고정 인자가 적어도 한 개 필요하다.

* 실제 받은 인자보다 많인 인자를 읽으려고 하면 안된다.

* 읽을 인자의 데이터형을 모두 알고 있어야 한다.
Comments