C언어에서도 가변 매개변수를 사용할 있다. 흔히 가변매개변수로는 오버로딩을 생각하지만 가변매개변수는 정확히 오버로딩과는 다르다.

 

오버로딩이란 이름만 같은 개이상의 함수를 만드는 것이라면 가변 매개변수는 하나의 함수에 파라미터 갯수를 가변적으로 조절하는 것이다.

 

1. 가변 매개변수

헤더파일 : #include <stdarg.h>

Void function(int args, …) { }

가변 매개변수를 가지는 함수와 같은 매개변수 포맷을 가진다.

번째 인자 : 매개변수의 개(가변매개변수의 개수를 의미)

번째 인자 : 가변매개변수 사용을 알리는 사용

 

위와 같이 함수를 만들고 printf("%d %s %d",num,str,num2); 같이 가변 매개변수를 input으로 함수를 호출하면

함수는 가변매개변수를 받아서 처리한다.

 

1) 처리

Void function (int args, …) {
va_list v_list;
int data;


va_start(v_list, args);
For(int i=0;i< args; i++) {
data = va_arg(v_list,int);
}
va_end(v_list);
}

입력받은 가변매개변수를 처리하는 방법은 위와 같다.

기본적으로 STL stdarg.h 헤더파일을 통해서 va_arg, va_start, va_end, va함수를 사용하여 처리하는데

먼저 va_list 변수를 만들어준다 해당 변수는 가변 매개변수들에 접근하여 매개변수 값을 하나씩 뽑아오는 역할이다.

 

그리고 va_start함수를 통해 매개변수의 갯수와 va_list 연결해서 va_list 가변 매개변수에 접근가능하도록 한다.

이후에는 va_arg() 통해서 가변 매개변수에 하나씩 접근이 순차적으로 가능하다.

매개변수의 갯수는 args 통해서 있기 때문에 이를 활용한 반복문으로 매개변수에 하나씩 접근 값을 가져올 있다.

 

마지막으로 모든 작업이 끝나면 va_end()함수를 통해서 처리 작업이 종료됨을 알리면 된다.

 

 

- ref

https://jhnyang.tistory.com/293

+ Recent posts