C 언어 변수 함수의 실현 원리

5382 단어
1. 변수 함수 간단한 예시
#include 
#include 

int Accumlate(int nr, ...)
{
    int i = 0;
    int result = 0;
    va_list arg = NULL;
    va_start(arg, nr);
    
    for(i = 0; i < nr; i++)
    {
        result += va_arg(arg, int);
    }
    
    va_end(arg);
    
    return result;
}

int main()
{
    printf("%d
", Accumlate(1, 100)); printf("%d
", Accumlate(2, 100, 200)); printf("%d
", Accumlate(3, 100, 200, 300)); return 0; }

 
2. 변참 함수의 실현 원리
#define va_list void*
#define va_start(arg, start) arg = (va_list)(((char*)&(start)) + sizeof(start))
#define va_arg(arg, type) *((type*)arg); arg = (char*)arg + sizeof(type);
#define va_end(arg) arg = 0;
 
#include 

#define va_list void*

#define va_start(arg, start) arg = (va_list)(((char*)&(start)) + sizeof(start))

#define va_arg(arg, type) *((type*)arg); arg = (char*)arg + sizeof(type);

#define va_end(arg) arg = NULL;


int Accumlate(int nr, ...)
{
    int i = 0;
    int result = 0;
    va_list arg = NULL;
    va_start(arg, nr);
    
    for(i = 0; i < nr; i++)
    {
        result += va_arg(arg, int);
    }
    
    va_end(arg);
    
    return result;
}

int main()
{
    printf("%d
", Accumlate(1, 100)); printf("%d
", Accumlate(2, 100, 200)); printf("%d
", Accumlate(3, 100, 200, 300)); return 0; }

 
3. 매개 변수 끝 표지에 대한 문제
① 예제 코드와 같이 매개 변수의 개수를 지정합니다.
② 마지막 매개변수를 고정 값(예: -1 또는 NULL)으로 나타냅니다.
③printf 함수와 같은 포맷 문자열 사용하기
 
주: 변수 함수는 최소한 하나의 인자를 제공해야 한다

좋은 웹페이지 즐겨찾기