C 变参数函数
考虑:C 变参数函数,c,visual-studio-2013,C,Visual Studio 2013,考虑: #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;
#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);
}
#包括
#包括
整数和(整数,…);
内部主(空)
{
int-answer=sum(4,4,3,2,1);
printf(“합은 %D입니다.\n“,答案);
返回0;
}
整数和(整数,…)
{
int-answer=0;
va_列表参数;
va_开始(argptr,num);
对于(;num>0;num--)
答案+=va_arg(argptr,int);
va_端(argptr);
返回(回答);
}
这是一个可变参数函数
什么是“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 */
answer += va_arg(argptr, int);
va_start()
的第二个参数必须是函数的最后一个命名参数(在您的例子中,这是num
,这是唯一提供的命名参数)。初始化后,可以使用va_arg()
宏从argptr
列表中逐个提取未命名的参数:
va_list argptr; /* declaration of the unnamed arguments list */
va_start(argptr, num); /* the initialization of the list */
answer += va_arg(argptr, int);
每次调用va_arg()
都会返回argptr
中的下一个参数,将其解释为int
(或作为va_arg()
的第二个参数提供的任何其他类型)。请注意,没有类型检查,也无法确保调用方实际提供了正确类型的参数
最后,在返回之前,应该通过调用<代码> VAYEnter(AgpTR)来发布列表。可以看出,不同意“C++中的变量数是一个好的副本1”是标记C++而不是C。2) “变量函数”是一个评价很高的答案@chux同意,我不认为这是一个好的dup,我不认为我见过这个问题的C版本。你在用什么书?它可能是过时的,也可能是完全错误的,或者你可能看错了地方。