여러 인수를 사용할 수 있는 일부 함수를 만들고자 한다고 가정하고 인수의 고정된 수는 없습니다. 우리는 세 가지 함수 sum(), max() 및 min()을 만들고 싶습니다. 그들은 숫자의 합, 숫자의 최대값 및 주어진 숫자의 최소값을 각각 계산할 수 있습니다. 이러한 각 함수는 첫 번째 인수로 count 개수의 인수를 사용합니다. 이러한 유형의 함수를 정의하려면 함수 인수에 세 개의 점 줄임표(...)를 사용해야 합니다. 그것을 사용하려면 stdarg.h 헤더 파일을 포함해야 합니다. 이러한 유형의 함수를 variadict 함수라고 합니다. 가변 인자에 접근하기 위해 우리가 알아차릴 수 있는 4가지 다른 것이 있습니다 -
-
va_list :주어진 모든 인수를 저장합니다.
-
va_start :변수 인수 ap 변수에 액세스하기 시작합니다.
-
va_arg :주어진 유형의 다음 인수를 검색하는 데 사용됩니다.
-
va_end :변수 인수 목록 액세스를 종료합니다.
따라서 −;
와 같은 함수를 호출하면- 합(5, 5, 2, 8, 9, 3)
- 최대(3, 5, 9, 2)
- 분(6, 8, 5, 2, 6, 7, 9)
그러면 출력은 27(5개 숫자의 합계), 9(주어진 3개 숫자의 최대값), 2(주어진 6개 숫자의 최소값)가 됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
함수 sum()을 정의하면 cnt가 사용되며 가변 개수의 인수가 필요합니다.
- va_list 앱 정의
- va_start(ap, cnt)로 ap 초기화
- n :=0
- i를 초기화하려면:=0, i
- n :=n + va_arg(ap, int)에 의한 다음 인수
- 최소:=현재
- 최대:=현재
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
#include <stdio.h> #include <stdarg.h> int sum (int cnt,...) { va_list ap; int i, n; va_start(ap, cnt); n = 0; for (i=0;i<cnt;i++){ n += va_arg(ap, int); } va_end(ap); return n; } int min(int cnt,...) { va_list ap; int i, current, minimum; va_start(ap, cnt); minimum = 99999; for (i=0;i<cnt;i++){ current = va_arg(ap, int); if (current < minimum) minimum = current; } va_end(ap); return minimum; } int max(int cnt,...) { va_list ap; int i, current, maximum; va_start(ap, cnt); maximum = 0; for (i=0;i<cnt;i++){ current = va_arg(ap, int); if (current > maximum) maximum = current; } va_end(ap); return maximum; } int main(){ printf("%d\n",sum(5, 5, 2, 8, 9, 3)); printf("%d\n",max(3, 5, 9, 2)); printf("%d\n",min(6, 8, 5, 2, 6, 7, 9)); }
입력
sum(5, 5, 2, 8, 9, 3) max(3, 5, 9, 2) min(6, 8, 5, 2, 6, 7, 9)
출력
27 9 2