반응형
일반적으로 가변인수를 사용하는 방법은 아래와 같습니다.
#include <stdio.h>
#include <stdarg.h> //가변 인수를 사용하기 위한 헤더파일
int sum(int i, ...);
void main()
{
printf("\n%d\n", sum(3, 1, 2, 3));
}
int sum(int i, ...)
{
int j, t, sum = 0;
va_list sp; //가변 인수들의 주소를 저장할 지역변수 va_list. Type은 char*
va_start(sp, i); //가변 인수 바로 앞에있는 고정매개변수를 받는다. 이 함수의 매개변수에서 가변인수(...) 앞에는 int i 이므로 i를 넘긴다.
for (j = 0; j < i; j++)
{
t = va_arg(sp, int); //int형으로 참조하여 값을 가져온다.
sum += t;
}
va_end(sp);
return sum;
}
이때 각 인자들의 주소는 어떻게 될까요?
#include <stdio.h>
#include <stdarg.h>
int sum(int i, ...);
void main()
{
printf("\n%d\n", sum(3, 1, 2, 3));
}
int sum(int i, ...)
{
int j, t, sum = 0;
va_list sp; //가변 인수들의 주소를 저장할 지역변수 va_list. Type은 char*
printf("i = %#x\n", &i);
va_start(sp, i); //가변 인수 바로 앞에있는 고정매개변수를 받는다. 이 함수의 매개변수에서 가변인수(...) 앞에는 int i 이므로 i를 넘긴다.
for (j = 0; j < i; j++)
{
printf("%d = %#x\t", j, sp);
t = va_arg(sp, int); //int형으로 참조하여 값을 가져온다.
sum += t;
}
va_end(sp);
return sum;
}
마치 배열처럼 순차적으로 stack에 차곡차곡 쌓여있음을 알 수 있습니다.
반응형
'Embedded > Programming language : C' 카테고리의 다른 글
[C] 가변 인수 (2) : 가변 인수 함수를 꼭 써야 가변인수를 사용할수 있는걸까? (0) | 2022.10.28 |
---|---|
[C] 선언한 배열의 index 이상을 접근하면 어떻게 될까? (0) | 2022.10.27 |
[C] Typedef 손쉽게 이해하기. (1) | 2022.10.27 |
[C] 매크로 함수 이해하기 (0) | 2022.10.26 |
[C] 매크로 함수에서 do~while(0)을 쓰는 이유 (0) | 2022.10.26 |