printf나 scanf를 보면 함수지만 보내지는 인자값이 매번 틀리다는걸 알 수 있다.
그렇다면 어떻게 그게 가능한 것인가?
가변 인수에 대해서 알아보자
#include <stdio.h>
#include <stdarg.h>
void printChar( int n1, ... ); // ... 이 부분이 가변 인수를 생성한다.
void main()
{
printChar(3, 'A','B','C');
printChar(4, 'A','B','C','D');
printChar(5, 'A','B','C','D','E'); // 실행 예
}
void printChar( int n1, ... )
{
va_list varl; // va_list 타입의 변수 생성(무조건)
char str[6]; // 실제로는 동적 할당을 해서 써야겠지만,
int i;
va_start(varl, n1); // va_start( va_list 타입의 인자, 인자의 갯수 )
for( i=0; i<n1; i++ )
{
str[i] = va_arg(varl, char); // va_arg( va_list 타입의 인자, 넘어가는 타입의 형식(char,int...))
}
str[i] = '\0';
printf( "%s\n", str );
va_end(varl); // 모든 상황이 끝났을 때 va_list 타입을 종료
}
결과를 보면 알 수 있듯이 함수에 보내주는 인자의 갯수만 있다면, 얼마든지 인자를 늘릴 수 있다. printf와 scanf는 이것 보단 훨씬 복잡 하겠지만, 가변 인수라는것이 존재 한다는 것이라도 기억하자.
중요한건 가변 인자를 받는 함수는 최소한 1개(인자의 갯수)를 파악할 수 있는 변수를 주어야 한다는 것이다.
'프로그래밍 > C언어' 카테고리의 다른 글
함수 포인터 (0) | 2010.03.09 |
---|---|
2차원 배열 동적 할당 (0) | 2010.03.09 |
문자열과 배열 (0) | 2010.03.08 |
재귀 호출 (0) | 2010.03.08 |
bit연산자 - & | ^ << >> (3) (0) | 2010.03.08 |