我真的很想知道printf是如何执行的。C中是否存在参数数组结构?我可以像printf一样定义我的自定义函数吗?
特殊类型va_list
用于使用变量列表参数。读这个。
您可以使用va_arg
宏。这里有一个的例子
#include <stdio.h> /* printf */
#include <stdarg.h> /* va_list, va_start, va_arg, va_end */
int FindMax (int n, ...)
{
int i,val,largest;
va_list vl;
va_start(vl,n);
largest=va_arg(vl,int);
for (i=1;i<n;i++)
{
val=va_arg(vl,int);
largest=(largest>val)?largest:val;
}
va_end(vl);
return largest;
}
int main ()
{
int m;
m= FindMax (7,702,422,631,834,892,104,772);
printf ("The largest value is: %dn",m);
return 0;
}
程序符合某些特定的ABI,调用约定由ABI定义。
调用约定定义了参数如何传递给函数,通常存储在寄存器或/和堆栈中。然后,函数相应地检索参数,这也适用于变差函数。
当然你可以自己定义变差函数。