가변 인수

#include <Turboc.h>

int GetSum(int num, ...) { // 고정인수 다음에, 여러 개의 가변인수가 올 수 있다.
   int sum=0;
   int i;
   va_list ap; // va_list 타입의 포인터 변수이다.
   int arg;

   va_start(ap,num); // ap가 첫번째 가변 인수를 가리키도록 초기화한다. num은 마지막 고정인수이다.

   for (i=0;i<num;i++) {
      arg=va_arg(ap,int); //ap 위치에 있는 해당 인수를 읽어주고, ap의 위치를 다음으로 넘긴다.
      // va_arg(ap,int)에서 타입이 맞지 않으면 오류가 날 것이다.
      sum+=arg;
   }

   va_end(ap); // 가변인수를 다 읽은 후 뒷정리를 한다.
   // 인텔 계열 CPU에서는 아무 일도 하지 않는다. 단, 다른 CPU는 다르므로 호환성을 위해 넣어준다.

   return sum;
}

void main()
{
   printf("1+2=%d\\n",GetSum(2,1,2));
   printf("3+4+5+6=%d\\n",GetSum(4,3,4,5,6));
   printf("10~15=%d\\n",GetSum(6,10,11,12,13,14,15));
}

기타

참고자료

https://www.geeksforgeeks.org/quizzes/functions-gq/

https://debugjung.tistory.com/entry/가변인수-다루기