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에 정의되어 있습니다.
- 지능 매개 변수 사용 매크로 매개 변수 목록으로의 va_list변수를 초기화하는va_start를.와 stdarg.h va_start를 매크로는 헤더 파일에 정의되어 있습니다.
- 각 항목에 대한 매개 변수 목록에 액세스 할 수va_arg를 매크로와의va_list 변수를 사용합니다.
- 부여의 va_list 변수 메모리를 va_end의청소 매크로를 사용합니다.
우리가 지금 가변 인자로 함수를 작성하려면 위의 단계를 수행하고 평균을 반환하자 :
#include <stdio.h> #include <stdarg.h> double average(int num,...) { va_list valist; double sum = 0.0; int i; /* 为 num 个参数初始化 valist */ va_start(valist, num); /* 访问所有赋给 valist 的参数 */ for (i = 0; i < num; i++) { sum += va_arg(valist, int); } /* 清理为 valist 保留的内存 */ va_end(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\n", average(3, 5,10,15)); }
상기 코드는 컴파일되고 실행될 때, 다음과 같은 결과를 생성한다.함수가 평균 () 첫 번째 파라미터가 가변 파라미터 전송의 총 수를 나타낸다마다 배라는 것을 주목해야한다.타원은 가변 인자를 전달하는 데 사용됩니다.
Average of 2, 3, 4, 5 = 3.500000 Average of 5, 10, 15 = 10.000000