2011-09-20 161 views
0

可能重复:
What is the signature of printf?printf()函数中的参数列表是什么?

我知道会有为每个函数的参数列表。我们的问题是

printf()函数也有参数列表和事件虽然我们给'n'no.of参数 printf()函数不会失败,然后

我想知道wht将用于printf()的参数列表部分,其中需要infinate参数列表?

+0

谷歌“c可变数量的参数”,并签出'' –

+2

-1 *研究努力*。 StackOverflow不是谷歌的机械土耳其人。如果你谷歌你的问题标题,你会得到答案。 –

+0

在这里发布这个问题之前,你可以简单地用它搜索它! –

回答

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

的关键词是可变参数,并且它们与宣...

+1

您打算完成这项工作吗?或者我们应该继续前进,并且因为它没有真正回答问题而令人信服。 –

+1

它是完整的,请随时downvote。我认为网络上有很多关于可变参数的解释,并且在这里不需要重复 - 这就是为什么我保持我的答案简短的原因。 – thiton

+0

-1如果用于发布“不完整”答案的参数是“网上提供的大量解释”,那么不应该麻烦回答。如果有人在意发布答案,那么最好是正确和完整的。 –

5

printf的是“可变参数”功能。这意味着参数列表最后声明为...,并且在执行printf时,使用va_list,va_start,va_arg等宏从可变长度列表中提取参数。

+0

(另外,从技术上讲,参数列表并不是无限的 - 它受堆栈大小的限制。) – Vicky

相关问题