Computer >> 컴퓨터 >  >> 프로그램 작성 >> C 프로그래밍

C의 가변 길이 인수

<시간/>

때로는 미리 정의된 수의 매개변수 대신 다양한 수의 인수, 즉 매개변수를 사용할 수 있는 함수를 갖고 싶을 때 상황이 발생할 수 있습니다. C/C++ 프로그래밍 언어는 이러한 상황에 대한 솔루션을 제공하며 요구 사항에 따라 다양한 수의 매개변수를 허용할 수 있는 함수를 정의할 수 있습니다. 다음 예는 이러한 함수의 정의를 보여줍니다.

int func(int, ... ) {
   .
   .
   .
}
int main() {
   func(1, 2, 3);
   func(1, 2, 3, 4);
}

func() 함수는 마지막 인수는 타원, 즉 세 개의 점(...)이고 타원 바로 앞의 인수는 항상 int입니다. 전달된 총 변수 인수 수를 나타냅니다. 이러한 기능을 사용하려면 stdarg.h를 사용해야 합니다. 가변 인수의 기능을 구현하고 주어진 단계를 따르기 위한 함수와 매크로를 제공하는 헤더 파일 -

  • 마지막 매개변수를 줄임표로 사용하여 함수를 정의하고 줄임표 바로 앞의 매개변수는 항상 인수의 수를 나타내는 int입니다.
  • va_list 만들기 함수 정의에 변수를 입력합니다. 이 유형은 stdarg.h 헤더 파일에 정의되어 있습니다.
  • int 사용 매개변수 및 va_start va_list를 초기화하는 매크로 변수를 인수 목록에 추가합니다. 매크로 va_start는 stdarg.h 헤더 파일에 정의되어 있습니다.
  • va_arg 사용 매크로 및 va_list 인수 목록의 각 항목에 액세스하는 변수입니다.
  • 매크로 사용 va_end va_list에 할당된 메모리 정리 변수.

이제 위의 단계를 따라 다양한 수의 매개변수를 사용하여 평균을 반환할 수 있는 간단한 함수를 작성해 보겠습니다. -

예시

#include <stdio.h>
#include <stdarg.h>
double average(int num,...) {
   va_list valist;
   double sum = 0.0;
   int i;
   va_start(valist, num); //initialize valist for num number of arguments
   for (i = 0; i < num; i++) {
      //access all the arguments assigned to valist
      sum += va_arg(valist, int);
   }
   va_end(valist); //clean memory reserved for valist
   return sum/num;
}
int main() {
   printf("Average of 2, 3, 4, 5 = %f\n", average(4, 2,3,4,5));
   printf("Average of 5, 10, 15 = %f", average(3, 5,10,15));
}

출력

Average of 2, 3, 4, 5 = 3.500000
Average of 5, 10, 15 = 10.000000