2013-04-29 2 views
2

숫자 n과 n int (가변 숫자)를 취하는 메서드를 작성하고 있는데이 함수는 n을 제외하고 int의 합계를 반환합니다. 각 매개 변수에 개별적으로 액세스하는 방법에 대해 고민하고 있습니다. 여기에 내가 지금까지 가지고있는 것, 나는 그것에 대해 온라인으로 읽었고 잘하면 나는 바른 길을 가고있다. 그물에 발견 유용 할 것으로 보인다 방법은 다음과 같습니다C의 인수 변수

int sumv(int n, ...) 
{ 
    va_list list; 
    va_start(list, n); 
    int sum = 0; 
    while(n>0) 
    { 
    sum += va_arg(list, int); 
    n--; 
    } 
    va_end(list); 
    return sum; 
} 
+1

[va_list 사용법]에 대한 [bobobobo의 글] (http://bobobobo.wordpress.com/2008/01/28/how-to-use-variable-argument-lists-va_list/)을 읽어 보시기 바랍니다. – bobobobo

+1

후라! 자기 승진을 위해 : D ... LOL : P .. 사실 꽤 좋은 : D –

답변

5

그것의 모양은 처음 다섯 자연수 합계 15을 인쇄합니다.

기본 아이디어는 va_start이며 변수 인수가 시작되기 전에 함수에서 사용할 목록과 마지막 인수를 모두 제공합니다.

그런 다음 va_arg을 호출 할 때마다 지정된 유형 (int 여기)의 다음 인수가 제공됩니다. 이 특정 코드는 카운터를 기반으로 호출하지만 음수가 인수에서 유효하지 않으면 음수와 같은 끝에 센티널 값을 동등하게 사용할 수 있습니다.

그런 다음 모든 인수를 처리했으면 va_end을 사용하여 처리를 종료하십시오.

+0

그럼 va_arg (list, int)를 호출하면 다음의 논쟁으로 넘어갈 것입니까? 매우 흥미 롭습니다 –

+0

@JamesCarter : 예 (다음 항목이 'int'라면, 두 번째 매개 변수는 검색 할 인수의 유형입니다). –

0

당신은 기본적으로이 찾고 :

#include <stdio.h> 
#include <stdarg.h> 

int sumv (int n, ...) { 
    va_list list; 

    int sum = 0; 

    va_start (list, n); 
    while (n-- > 0) 
     sum += va_arg (list, int); 
    va_end (list); 

    return sum; 
} 

int main (void) { 
    printf ("%d\n", sumv (5, 1, 2, 3, 4, 5)); 
    return 0; 
} 

va_start() 
va_arg() 
va_end() 


int sumv(int n, ...) 
{ 
    va_list list; 
    int sum = 0; 
    while(n>0) 
    { 
    //********************* 
    //this is the part where I am stuck on, how do I get each paramater? 
    //I know it will be an int 
    //********************* 
    n--; 
    } 
    return sum; 
}