Som*_*ame 1 c function ellipsis language-lawyer
我对带有可变数量参数的函数的语义有误解。6.5.2.2(p6):
如果使用包含原型的类型定义函数,并且原型以省略号(,...)结尾,或者升级后的参数类型与参数类型不兼容,则行为是不确定的。
这还不是很清楚。在原型下面的功能定义中,是否以省略号结尾?
void foo(int i, ...){
//...
}
Run Code Online (Sandbox Code Playgroud)
起初我以为是关于函数的,参数列表仅包含省略号,例如
void foo(...){
//...
}
Run Code Online (Sandbox Code Playgroud)
但是这种情况是由6.9.1(p8):
如果定义了接受可变数量参数的函数而没有以省略号结尾的参数类型列表,则该行为未定义
所以我真的不明白他们的意思是什么
要么原型以省略号(,...)结尾
在 6.5.2.2(p6)
本段讨论了一个函数调用表达式提到一个没有原型的函数的情况。在这种情况下,编译器必须根据调用的参数类型来猜测其参数的类型。
如果该函数被定义为可变参数(可能在另一个翻译单元中),或者参数类型与编译器的猜测不符,则该行为未定义。
| 归档时间: |
|
| 查看次数: |
96 次 |
| 最近记录: |