몽상실현개발주의

[따배씨] 16.17 가변 인수 Variable Arguments 본문

Language/C

[따배씨] 16.17 가변 인수 Variable Arguments

migrationArc 2021. 11. 2. 10:15

[따배씨] 16.17 가변 인수 Variable Arguments

따배씨 - 따라하며 배우는 C언어

16강 전처리기와 라이브러리

16.17 가변 인수 Variable Arguments

#include <stdio.h>
#include <string.h>
#include <stdarg.h> // Variable Arguments

/*
    Variable Arguments
    - int printf(char const * const _Format, ...);
 
    1. Provide a function prototype using an ellipsis
    
    void    vaf1(int n, ...);  // OK
    int     vaf2(const char * s, int k, ...);  // OK
    char    vaf3(char c1, ..., char c2); // Not OK, ellipsis should be the last.
    double  vaf4(...);  // Not OK, no parameter.
 
    2. Create a va_list type variable in the function definition
    3. Use a macro to initialize the variable to an argument list
    4. Use a macro to access the argument list.
 */

double average(int, ...);
double average2(char* format_string, ...);

int main()
{
    double a, b;
    
    a = average(3, 1.1, 2.2, 3.3);
    b = average(6, 1.1, 2.2, 3.3, 4.4, 5.5, 6.6);
    
    printf("%lf\n", a);
    printf("%lf\n", b);
    
    return 0;
}

double average(int num, ...)
{
    va_list ap;
    double sum = 0.0;
    int i;
    
    va_start(ap, num);
    // 마지막 변수를 두번째 argument 로 넣어줌
    
    for (i = 0; i < num; i++)
        sum += va_arg(ap, double);
    va_end(ap);
    
    return sum / (double)num;
}

double average2(char * format_string, ...)
{
    int num = (int)strlen(format_string);
    
    va_list ap;
    double sum = 0.0;
    int i;
    
    va_start(ap, format_string);
    for (i = 0; i < num; i++)
    {
        sum += va_arg(ap, double);
    }
    
    va_end(ap);
    
    return sum / (double)num;
}

 

 


이 글의 모든 사진과 내용의 출처는 홍정모 교수님께 있음을 알려드립니다.

http://blog.naver.com/atelierjpro

 

실리콘 밸리의 프로그래머 : 네이버 블로그

안녕하세요! 홍정모 블로그에 오신 것을 환영합니다. 주로 프로그래밍 관련 메모 용도로 사용합니다. 강의 수강하시는 분들은 홍정모 연구소 카페로 오세요.

blog.naver.com

http://www.inflearn.com/course/following-c

 

홍정모의 따라하며 배우는 C언어 - 인프런 | 강의

'따배씨++'의 성원에 힘입어 새롭게 개발된 C 언어로 시작하는 프로그래밍 입문 강의입니다. '따배씨'와 함께 프로그래밍 인생을 업그레이드 해보세요., 따라하며 배우는 C언어 '따배씨++'의 성원

www.inflearn.com

Comments