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