Embedded/Programming language : C

[C] 가변 인수 (1) : 가변 인수 함수의 주소는 어떻게 될까

별빛의온기 2022. 10. 28. 08:55
반응형

 

일반적으로 가변인수를 사용하는 방법은 아래와 같습니다.

 

#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에 차곡차곡 쌓여있음을 알 수 있습니다.

 

반응형