prev up next   top/contents search

comp.lang.c FAQ 列表· 问题 15.10

Q我有一个接受float参数。为什么

va_arg(argp, float)
不起作用?


类型参数的可变参数函数在可变参数列表的可变长度部分,旧的“默认参数提升”规则仍然适用:类型为float的参数总是会被提升(拓宽)为double类型,而类型为charshort int被提升为int。因此,调用va_arg(argp, float)永远是错误的;你应该始终使用va_arg(argp, double)。类似地,使用va_arg(argp, int)来获取原本是char, shortint类型的参数。(出于类似的原因,传递给va_start的最后一个“固定”参数也不应是可被拓宽的类型。)另请参阅问题 11.315.2

参考:ISO Sec. 6.3.2.2
Rationale Sec. 4.8.1.2
H&S Sec. 11.4 p. 297


prev up next   contents search
关于此 FAQ 列表   关于 Eskimo   搜索   反馈   版权

Eskimo North 托管