카테고리 없음

C variable arguments

sunshout 2014. 11. 6. 11:14

C variable arguments


- func 은 마지막 parameter 로 elipsis (...) 를 가져야 함

- 첫번째 parameter는 int를 가져야 함, 이는 total parameter 의 개수를 가지고 있음

- stdarg.h 파일을 Include 해야 함


ex) skeleton code 


#include <stdarg.h>


int func(int, ... )

{


}


int main()

{

func(1,2,3);

func(1,2,3,4);

}



실제 사용 방법

- va_list type을 선언함

- va_start macro와 int parameter를 이용하여 전체 parameter 개수를 파악

  .ex) va_start(valist, num);

- va_arg macro와 va_list를 이용하여 각 item 을 구할 수 있다.

  .ex) va_arg(valist, int);

- va_end macro를 통해서 va_list를 clear 한다.


#include <stdio.h>

#include <stdarg.h>


double average(int num,...)

{


    va_list valist;

    double sum = 0.0;

    int i;


    /* initialize valist for num number of arguments */

    va_start(valist, num);


    /* access all the arguments assigned to valist */

    for (i = 0; i < num; i++)

    {

       sum += va_arg(valist, int);

    }

    /* clean memory reserved for valist */

    va_end(valist);


    return sum/num;

}


int main()

{

   printf("Average of 2, 3, 4, 5 = %f\n", average(4, 2,3,4,5)); /* 4개의 parameter(2,3,4,5)를 보냄 */

   printf("Average of 5, 10, 15 = %f\n", average(3, 5,10,15));  /* 3개의 parameter(5,10,15)를 보냄 */

}