什么是'...'令牌的正确用语?

时间:2011-02-08 19:35:19

标签: c++ c terminology

考虑printf:

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

用于描述...的术语和使用它的函数有哪些?我一直称它为省略号,但这就像调用&“&符号运算符”。

8 个答案:

答案 0 :(得分:19)

Variable length parameter list

编辑:

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

答案 1 :(得分:14)

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

答案 2 :(得分:8)

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

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

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

答案 3 :(得分:4)

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

答案 4 :(得分:2)

This C++ draft specification简称为“省略号”,有时会带有明确或不确定的文章,如“省略号”或“省略号”。

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

  

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

8.3.5“功能”第2节包含:

  

如果是parameter-declaration-clause   终止于省略号,   参数的数量应等于   或大于   没有默认值的参数   参数。

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节解释说,虽然省略号出现在参数声明子句中,但它遵循参数声明列表。

答案 5 :(得分:2)

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

此外,不使用术语“&符号运算符”的主要原因是&符号可以表示两个不同的运算符中的任何一个,具体取决于上下文,这将使术语含糊不清。省略号不会出现这种情况;没有分配给它的其他含义,因此对于令牌“...”使用术语“省略号”是就像使用术语“&符号运算符”作为令牌“{{1 }}”。

答案 6 :(得分:1)

答案 7 :(得分:1)

马丁和德米安都是对的:

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