printf()函数中的参数列表是什么?

时间:2011-09-20 12:00:17

标签: c

  

可能重复:
  What is the signature of printf?

我知道每个函数都会有一个参数列表。 如果我们传递的参数多于参数列表中提到的变量no.of 它给出了一个错误。但我的问题是

Printf()函数也有参数列表和event,尽管我们给出'n'no.of参数 printf()函数不会失败

我想知道wht将在printf()的参数列表部分中使用,该部分采用infinate参数列表?

3 个答案:

答案 0 :(得分:5)

printf是一个“可变参数”函数。这意味着参数列表最后用...声明,并且在printf的实现中,va_listva_startva_arg等宏用于提取参数来自可变长度列表。

答案 1 :(得分:4)

printf的签名看起来像这样:

int printf ( const char * format, ... );

如果函数的最后一个参数有'...',它可以接收任意数量的参数。在函数中,您将使用va_arg来访问这些参数。以下是cplusplus.com的示例:

/* va_start example */
#include <stdio.h>
#include <stdarg.h>

void PrintFloats ( int amount, ...)
{
  int i;
  double val;
  printf ("Floats passed: ");
  va_list vl;
  va_start(vl,amount);
  for (i=0;i<amount;i++)
  {
    val=va_arg(vl,double);
    printf ("\t%.2f",val);
  }
  va_end(vl);
  printf ("\n");
}

int main ()
{
  PrintFloats (3,3.14159,2.71828,1.41421);
  return 0;
}

请注意,此处的PrintFloats要求您传入其他参数的数量。 printf不需要这样做,因为它可以通过计算格式字符串中的标记来推断传入的参数数量。

答案 2 :(得分:-3)

关键字是可变参数,它们用...

声明