关于函数定义的问题(参数中的三个点)

我碰到一个函数定义:

char* abc(char *f, ...) { } 

这三个点是什么意思?

省略号表示后面有可变数目的参数。 您将使用它们的地方(可能没有意识到)是printf家族。

它们允许你在事先不知道参数的情况下创build那种风格的函数,你可以使用可变参数函数( va_startva_argva_end )来获得特定的参数。

这里的链接对可变参数列表的printf使用有一个很好的论述。

维基百科在C ++中的可变参数函数

他们被称为elipsis,他们的意思是该函数可以采取不确定数量的参数。 你的函数可以这样调用:

 abc( "foo", 0 ); abc( "foo", "bar", 0 ); 

需要有一种方法来指示列表的结尾。 这可以通过使用第一个参数来完成,如printf(0格式的string,或者通过特殊的终结符,在上面的例子中为0。

具有可变数目参数的函数在C ++中被认为是不正确的forms,因为不能对参数执行types检查或用户定义的转换。

这就是在C中所谓的可变参数函数或可变参数函数。

你可能会认识到的是printf。