我对带有可变数量参数的函数的语义有误解。 6.5.2.2(p6)
:
如果函数的类型定义为包含原型, 并且原型以省略号(,...)结尾或 升级后的参数类型与 参数类型,行为是不确定的。
这不是很清楚。原型下面的函数定义中是否以省略号结尾?
void foo(int i, ...){
//...
}
起初我以为是关于函数的,参数列表仅包含省略号,例如
void foo(...){
//...
}
但是这种情况由6.9.1(p8)
描述:
如果定义了接受可变数量参数的函数 如果没有以省略号结尾的参数类型列表, 行为未定义
所以我不太了解
的含义。两个原型都以省略号(,...)
结尾
在6.5.2.2(p6)
答案 0 :(得分:5)
本段讨论了函数调用表达式提到没有原型的函数的情况。在这种情况下,编译器必须根据调用的参数类型来猜测其参数的类型。
如果该函数(可能在另一个翻译单元中)定义为可变参数,或参数类型与编译器的猜测不符,则该行为未定义。