c中函数的不定参数是怎么实现的?
问题点数:20、回复次数:6Top
1 楼karma(无为MS MVP)回复于 2001-11-11 01:15:49 得分 15
follow this example:
#include <stdio.h>
#include <stdarg.h>
/* calculate sum of a 0 terminated list */
void sum(char *msg, ...)
{
int total = 0;
va_list ap;
int arg;
va_start(ap, msg);
while ((arg = va_arg(ap,int)) != 0) {
total += arg;
}
printf(msg, total);
va_end(ap);
}
int main(void) {
sum("The total of 1+2+3+4 is %d\n", 1,2,3,4,0);
return 0;
}
Top
2 楼fat_how(肥浩)回复于 2001-11-11 14:10:56 得分 0
va_****是什么东西?
Top
3 楼karma(无为MS MVP)回复于 2001-11-11 14:16:57 得分 0
if you take a look at stdarg.h, you will see
typedef struct {
char *a0; /* pointer to first homed integer argument */
int offset; /* byte offset of next parameter */
} va_list;
#define _INTSIZEOF(n) ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1) )
#define va_start(ap,v) ( ap = (va_list)&v + _INTSIZEOF(v) )
#define va_arg(ap,t) ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )
#define va_end(ap) ( ap = (va_list)0 )
Top
4 楼xwu(蛮牛)回复于 2001-11-11 14:30:55 得分 5
这篇文章讲得很清楚.
http://www.fanqiang.com/a4/b2/20010613/151154.htmlTop
5 楼fat_how(肥浩)回复于 2001-11-11 14:35:02 得分 0
不懂
Top
6 楼fat_how(肥浩)回复于 2001-11-11 14:59:50 得分 0
谢了
Top




