簡體   English   中英

變參數功能

[英]Variable parameter function

考慮:

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

int sum(int, ...);

int main(void)
{
    int answer = sum(4, 4, 3, 2, 1);
    printf("합은 %d입니다.\n", answer);

    return 0;
}

int sum(int num, ...)
{
    int answer = 0;
    va_list argptr;

    va_start(argptr, num);
    for (; num > 0; num--)
        answer += va_arg(argptr, int);

    va_end(argptr);
    return(answer);
}

這是一個可變參數函數。

什么是“ stdarg.h ”? 我在關於va_listva_endva_start書中找不到它。

頭文件“stdarg.h”是一個標准的 C 頭文件,它聲明了一些宏,用於處理具有不同類型參數的不同數量的函數。 聲明的最重要的宏是va_listva_startva_endva_arg

va_list表示一個抽象數據類型,它可以存儲函數調用的“未命名”參數(那些被“...”捕獲的參數)。 要使用它,您必須首先使用va_start()宏對其進行初始化:

va_list argptr; /* declaration of the unnamed arguments list */
va_start(argptr, num); /* the initialization of the list */

va_start()的第二個參數必須是函數的最后一個命名參數(在您的情況下,這是num ,這是提供的唯一命名參數)。 初始化后,您可以使用va_arg()宏從argptr列表中一一提取未命名的參數:

answer += va_arg(argptr, int); 

va_arg()每次調用都會從argptr返回下一個參數,將其解釋為int (或作為va_arg()的第二個參數提供的任何其他類型)。 請注意,沒有類型檢查,也無法確保調用者實際上提供了正確類型的參數。

最后,應該在返回之前通過調用va_end(argptr)來釋放列表。

暫無
暫無

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

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