개발자 노트
가변인자 함수 본문
printf 함수와 scanf 함수의 공통점
: 첫 번째 전달인자인 문자열에 존재하는 서식문자의 수만큼 전달인자의 수도 증가한다.
위의 함수들이 정의되어 있는 stdio.h 헤더파일을 살펴보면 다음과 같다.
함수의 매개변수 선언을 보면 … 있다. 이 것은 인자의 자료형과 수에 제한이 없음을 의미한다.
-
가변인자 매개변수의 선언방법
매개변수 선언을 통해서 미리 함수가 호출 될 때 전달되어야 할 인자의 수와 자료형이 결정된다. 그런데
가변인자 함수는 호출이 될 때 인자의 수가 결정되기 때문에 … 으로 가변인자에 대한 선언을 한다.
소스코드 |
#include <stdio.h> int Sum(int n, ...); int main(void) { Sum(2, 1, 2); // 2개를 더하겠다. 1+2 Sum(3, 1, 2, 3); // 3개를 더하겠다. 1+2+3 Sum(4, 1, 2, 3, 4); // 4개를 더하겠다. 1+2+3+4 return 0; } int Sum(int n, ...) { printf("num=%d \n", n); return 0; } |
실행결과 |
위 예제를 통해 가변인자에 대한 매개변수의 선언방식을 알 수 있다.
Sum 수의 첫 번째 인자는 더해질 값의 개수이고, 나머지 인자는 더해질 값들이다.
-
전달된 인자들 추출 방법
가변인자 함수의 호출을 통해서 전달되는 인자정보를 추출하기 위해서는 다음 단계를 거쳐야 한다.
괄호 안은 각각의 기능을 제공하는 함수의 이름과 참조자의 자료형이다.
이들을 사용하기 위해서는 헤더파일 stdarg.h 를 포함해야 한다.
- 가변인자를 가리킬 수 있는 참조자를 선언한다. (va_list)
- 참조자가 가변인자를 실제로 참조할 수 있도록 한다. (va_start)
- 참조자를 통해 전달된 정보를 추출한다. (va_arg)
- 참조자가 더 이상 가변인자를 가리키지 않도록 해제한다. (va_end)
소스코드 |
#include <stdio.h> #include <stdarg.h> int Sum(int n, ...); int main(void) { printf("1+2=%d \n", Sum(2, 1, 2)); printf("1+2+3=%d \n", Sum(3, 1, 2, 3)); printf("1+2+3+4=%d \n", Sum(4, 1, 2, 3, 4)); return 0; } int Sum(int n, ...) { int sum=0; int i; va_list vlist; // 단계1: 가변인자의 참조자 선언
va_start(vlist, n); // 단계2: 참조 대상과 범위 지정 for(i=0; i<n; i++) sum+=va_arg(vlist, int); // 단계3: 값 추출
va_end(vlist); // 단계4: 해제 return sum; } |
실행결과 |
# 참조
열혈C프로그래밍;윤성우
'▶ INBOX ◀' 카테고리의 다른 글
PATH에서 프로그램 검색 (0) | 2016.09.20 |
---|---|
구조체 프로그래밍 (0) | 2016.09.20 |
[Linux] 명령어 모음 (0) | 2016.09.20 |
리눅스 커널과 디바이스 드라이버 프로그래밍 (0) | 2016.09.19 |
[Linux] 리눅스 디렉토리 구조 (0) | 2016.09.19 |