4.2(화) 가변 인수에 맛보기..

from Study/C언어 2007/04/02 20:18 view 25145

int __cdecl printf (

        const char *format,

        ...

        )

/*

 * stdout 'PRINT', 'F'ormatted

 */

가변인수란 인수의 개수와 타입이 미리 정해져 있지 않은 것으로 이런 인수를 사용하는 함수를 가변 인수 함수라 한다.

번째 인수(고정인수) : format으로 문자열 상수를 의미하며 서식 문자열이라고도

번째 인수(가변인수) : 이후부터는 타입과 인수 이름이 명시되어 있지 않으며 대신 생략 기호인(ellipsis) 적혀 있다. – 생략기호는 컴파일러에게 이후의 인수에 대해서는 개수와 타입을 점검하지 않도록 하는데 기호에 의해 가변 인수가 가능해진다.

printf("%d", 1,2,3);   // %d 하나가 가변인수 하나 인식


int GetSum(int num, ...)

{

        int sum=0;

        int i;

        va_list ap;

        int arg;

 

        va_start(ap,num);

        for (i=0;i<num;i++) {

               arg=va_arg(ap,int);

               sum+=arg;

        }

        va_end(ap);

        return sum;

}


va_list ap : 함수로 전달되는 인수들은 스택에 저장되며 함수는 스택에서 인수를 꺼내 쓴다.

va_start(ap, Fix) :
가변 인수를 읽기 위한 준비를 하는 것으로 ap포인터 변수가 번째 가변인수를 가리키도록 초기화 한다
.

va_arg(ar,
인수타입) : 가변인수를 실제로 읽는 명령임. va_start ap 번째 가변 인수번지로 맞추어 주므로 ap위치에 있는 값을 읽으면 된다. ap번지에 있는 값의 타입을 지정해 줘야 (정수를 읽으면-va_arg(ap, int), 실수일경우
-va_arg(ap, double) )

va_end(ap) :
가변인수를 읽은 뒷정리를 하는 것.(없어도 )


Trackback Address :: 이 글에는 트랙백을 보낼 수 없습니다