什么是’…’令牌的正确用语?

考虑printf:

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

用于描述...以及使用它的函数的术语是什么? 我一直称它为省略号,但这就像打电话& “&符号运算符”。

可变长度参数列表

编辑:

或者,如果描述函数本身: Variadic函数

省略号(,……)p202“K + R C编程语言”

事实上,“省略号”通常是这里最好的术语。 有时我们引用“使用省略号传递的参数”(C ++ 03 8.3.5p2)。 在确定最佳重载函数的上下文中,可以说一个参数“匹配省略号”(C ++ 03 13.3.2p2)。

printf和其他类似函数通常称为“可变函数”。

注意:即将推出的C ++ 0x Standard提供了两种不同的方式来声明和实现可变参数函数( va_arg方式和模板方式)。 但两者都涉及省略号令牌。

省略号算子是我听过的唯一一个词 – 很少(谢天谢地)你不需要别的东西!

这个C ++草案规范简称为“ 省略号 ”,有时带有明确或不确定的文章,如“ 省略号 ”或“ 省略号 ”。

5.2.2“函数调用”第6节包含:

可以声明函数接受较少的参数(通过声明默认参数(8.3.6))或更多参数(通过使用省略号 ,… 8.3.5)而不是函数定义(8.4)中的参数数量。

8.3.5“function”第2节包含:

如果参数声明子句以省略号终止,则参数的数量应等于或大于没有默认参数的参数的数量。

8.3.6第4节包含示例代码:

 void g(int = 0, ...); // OK, ellipsis is not a parameter so it can follow // a parameter with a default argument 

额外的迂腐:第13.3.3.1.3节(“省略号转换序列”)是指“省略号参数规范”。 但是,如上面的示例代码所述,严格来说,省略号不是参数。 8.3.5第1节解释说,虽然省略号出现在parameter-declaration-clause中,但它遵循参数声明列表。

除了“省略号”和“可变函数”之外,还可以看到“vararg”和“varargs”这两个词。 这似乎是“变量参数列表”的缩写,由POSIX中(LEGACY)标题周围的语言判断。

此外,不使用术语“&符运算符”的主要原因是&符号可以表示两个不同的运算符中的任何一个,这取决于上下文,这将使该术语模糊。 省略号不会出现这种情况; 没有赋予它的其他含义,因此对于令牌“ ... ”使用术语“省略号”与使用术语“&符号运算符” 不同于令牌“ & ”。

可变参数

马丁和德米安都是对的:

  • 他们三个 ”。” 一起形成省略号(在Macintosh上,这是一个特殊字符“…”,但不能用于C ++)
  • 在C ++中,省略号用于定义可变长度参数列表