簡體   English   中英

Variadic function 返回垃圾值

[英]Variadic function returns garbage value

我在 C 中測試可變參數函數。下面應該返回所有 arguments 的總和,但它一直打印垃圾值。

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



int add(int x, int y, ...)
{
    va_list add_list;
    va_start(add_list, y);

    int sum = 0;

    for (int i = 0; i < y; i++)
        sum += va_arg(add_list, int);

    va_end(add_list);

    return sum;
}


int main()
{
    int result = add(5, 6, 7, 8, 9);
    printf("%d\n", result);

    return 0;
}

我以為它會返回所有 arguments 的總和

可變參數 function 需要某種方式來了解您已將多少個值傳遞給 function。因此,您還應將此數字作為第一個參數傳遞給 function:

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

int add( int num_values, ... )
{
    va_list add_list;
    va_start( add_list, num_values );

    int sum = 0;

    for ( int i = 0; i < num_values; i++ )
        sum += va_arg( add_list, int );

    va_end(add_list);

    return sum;
}

int main( void )
{
    int result = add( 5, 5, 6, 7, 8, 9 );
    printf( "%d\n", result );

    return 0;
}

該程序具有以下 output:

35

你說你有y個可選的 arguments,但實際上你只有 3 個,而不是 6 個。

int result = add(5, 3, 7, 8, 9);

應該管用。

PS:此外,您不使用第一個參數x ,因此可以將其刪除。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM