[英]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_list
、 va_end
和va_start
書中找不到它。
頭文件“stdarg.h”是一個標准的 C 頭文件,它聲明了一些宏,用於處理具有不同類型參數的不同數量的函數。 聲明的最重要的宏是va_list
、 va_start
、 va_end
和va_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.