【问题标题】:How can printf function can take variable parameters in number while output them?printf 函数如何在输出时采用数量可变的参数?
【发布时间】:2014-04-16 08:24:57
【问题描述】:

我真的很想知道 printf 是如何执行的。 C中有参数数组结构吗?我可以定义像 printf 这样的自定义函数吗?

【问题讨论】:

标签: c variadic-functions


【解决方案1】:

一种特殊类型va_list 用于使用变量列表参数。阅读this

【讨论】:

  • 谢谢。非常有趣但干净的答案。
【解决方案2】:

您可以使用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: %d\n",m);
  return 0;
}

【讨论】:

    【解决方案3】:

    程序符合某些特定的ABIcalling convention 由 abi 定义。

    调用约定定义了参数如何传递给函数,通常存储在寄存器或/和堆栈中。然后函数相应地检索参数,这也适用于variadic 函数。

    当然你可以自己定义可变参数函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-03
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      • 2011-10-25
      • 1970-01-01
      • 1970-01-01
      • 2018-07-04
      相关资源
      最近更新 更多