#include <stdio.h>
#include <stdarg.h>
double add_values(char *str, ...)
{
va_list marker;
double result = 0.0;
va_start(marker, str); // mark first additional argument
while (*str) // examine each character in the string
{
if (*str == '%') // if not a %_ format specifier, skip it
{
switch (*(++str)) {
case 'd': result += va_arg(marker, int);
break;
case 'f': result += va_arg(marker, double);
break;
}
}
str++;
}
va_end(marker);
return(result);
}
void main(void)
{
double result;
printf("Result %f\n", add_values("%f", 3.3));
printf("Result %f\n", add_values("%f %f", 1.1, 2.2));
printf("Result %f\n", add_values("%f %d %f", 1.1, 1, 2.2));
printf("Result %f\n", add_values("%f %d %f %d", 1.1, 1, 2.2, 3));
}
本文深入探讨了C语言中使用`...`作为参数的函数如何接收和处理变长参数列表,通过实例展示了如何定义和调用此类函数,并详细解释了内部的工作原理。

被折叠的 条评论
为什么被折叠?



