>>259
T va_arg(va_list p, T)
だから、変換する型は double に限定しなくとも、たとえば float でも OKのはず。
つまり printf() の引数に float をのせることは原理的に可能。float か double かは、第一引数をみて判断しようとおもえばできる。int, long, unsigned はそうしている。
(可変長引数関数といえども第一引数は必須)

でも、C のお約束として関数の引数は浮動小数点数では double に一律に変換されるのがお約束。そういう意味で %lf はいらない。