关于函数定义的问题(参数中的三个点)
我碰到一个函数定义:
char* abc(char *f, ...) { }
这三个点是什么意思?
省略号表示后面有可变数目的参数。 您将使用它们的地方(可能没有意识到)是printf
家族。
它们允许你在事先不知道参数的情况下创build那种风格的函数,你可以使用可变参数函数( va_start
, va_arg
和va_end
)来获得特定的参数。
这里的链接对可变参数列表的printf
使用有一个很好的论述。
维基百科在C ++中的可变参数函数
他们被称为elipsis,他们的意思是该函数可以采取不确定数量的参数。 你的函数可以这样调用:
abc( "foo", 0 ); abc( "foo", "bar", 0 );
需要有一种方法来指示列表的结尾。 这可以通过使用第一个参数来完成,如printf(0格式的string,或者通过特殊的终结符,在上面的例子中为0。
具有可变数目参数的函数在C ++中被认为是不正确的forms,因为不能对参数执行types检查或用户定义的转换。
这就是在C中所谓的可变参数函数或可变参数函数。
你可能会认识到的是printf。