“...”标记的正确术语是什么?

14

考虑printf:

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

用于描述...和使用它的函数的术语是什么?我一直称其为省略号,但这就像称&为"和符号运算符"一样。


14
“省略号”是指标准中使用的 ... 符号。它特指 ... 符号。在参数列表中声明带有省略号的函数称为“可变参数”函数。 - AnT stands with Russia
6
正确的技术术语是“点点点”运算符。 - Edward Strange
2
@Noah Roberts:这听起来令人惊讶,因为它不是一个运算符。 - caf
这就像称呼“和符号运算符”。但实际上并不是这样,因为“...”在这里实际上被用作省略号,而“&”符号则被用作二进制AND运算符。 - Jim Balter
8个回答

18

你的引用没有提到“...”。C和C++标准都将“...”称为省略号。 - Jim Balter

14

省略符号(,...)p202“K+R The C Programming Language”


8
"省略号"实际上通常是这里最好的术语。有时我们称之为“使用省略号传递的参数”(C++03 8.3.5p2)。在确定最佳重载函数的情况下,可以说一个参数"匹配省略号"(C++03 13.3.2p2)。 printf和类似它的其他函数通常被称为"可变参数函数"。
注意:即将发布的C++0x标准提供了两种不同的声明和实现可变参数函数的方式(va_arg方式和模板方式)。但两种方式都涉及到省略号标记。

(好吧,这个问题最初被标记为C++。) - aschepler

4

省略操作符是我听说过的唯一术语 - 它已经足够罕见(幸好),你不需要其他任何东西!


4
“点点点”怎么样?说起来很有趣 :) - user1481860
@Øystein 这就是我最初查找的内容,因为谷歌忽略了“...”(是的,这是省略号后面的句号)。 - Maxpm
1
@Maxpm:在这种情况下,英国引号的惯例非常有用。 - SamB

2

这份 C++ 草案规范 简单地将其称为“省略号”,有时用定冠词或不定冠词来表示,如“一个省略号”或“这个省略号”。

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节解释了,虽然省略号出现在参数声明列表中,但它跟随参数声明列表之后。

2
除了"省略号"和"可变参数函数"之外,人们还会看到术语"vararg"和"varargs"。 根据(LEGACY)标头中的语言,这似乎是"variable argument list"的缩写,链接为<varargs.h> POSIX
另外,“ampersand operator”一词未被使用的主要原因是安德符号在不同的上下文中可以代表两种不同的操作符,这将使术语具有歧义。这不会发生在省略号上;没有其他含义分配给它,所以使用术语“ellipsis”来表示“...”标记并不像使用术语“ampersand operator”来表示“&”标记那样具有歧义。

1

1

Martin和Demian都是正确的:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接