带省略号的函数定义

时间:2019-04-10 14:35:23

标签: c function language-lawyer ellipsis

我对带有可变数量参数的函数的语义有误解。 6.5.2.2(p6)

  

如果函数的类型定义为包含原型,   并且原型以省略号(,...)结尾或   升级后的参数类型与   参数类型,行为是不确定的。

这不是很清楚。原型下面的函数定义中是否以省略号结尾?

void foo(int i, ...){
    //...
}

起初我以为是关于函数的,参数列表仅包含省略号,例如

void foo(...){
    //...
}

但是这种情况由6.9.1(p8)描述:

  

如果定义了接受可变数量参数的函数   如果没有以省略号结尾的参数类型列表,   行为未定义

所以我不太了解

的含义。
  

两个原型都以省略号(,...)

结尾

6.5.2.2(p6)

1 个答案:

答案 0 :(得分:5)

本段讨论了函数调用表达式提到没有原型的函数的情况。在这种情况下,编译器必须根据调用的参数类型来猜测其参数的类型。

如果该函数(可能在另一个翻译单元中)定义为可变参数,或参数类型与编译器的猜测不符,则该行为未定义。