1、问题
编译可变参数函数里面有va_arg函数的时候提示这个错误
expanded from macro 'va_arg' #define va_arg(ap, type)
2、原因
我没有考虑“默认参数提升”问题
如果一个函数的形参类型未知, 例如使用了Old Style C风格的函数声明,或者函数的参数列表中有 ...,那么调用函数时要对相应的实参做Integer Promotion,此外,相应的实参如果是float型的也要被提升为double类型, char 要提升为int类型,这条规则称为Default Argument Promotion。
我的代码是这样写的
va_arg(arg, float)
3、如何修改代码
va_arg(arg, double)
4、总结
默认实际参数提升场景:
一般是可变参数列表,第一个参数有类型,后面的可变参数没类型,后面所有的可变参数就会有 默认参数提升的场景