Rust errors / Types and traits
Rust compiler error · checked with rustc 1.99.0
Rust error E0617: can't pass `f32` to variadic function
What it meansAttempted to pass an invalid type of variable into a variadic function.
What rustc prints
error[E0617]: can't pass `f32` to variadic function --> main.rs:8:36 | 8 | printf("%f\n\0".as_ptr() as _, 0f32); | ^^^^ | help: cast the value to `c_double` | 8 | printf("%f\n\0".as_ptr() as _, 0f32 as c_double); | +++++++++++
Real output of rustc 1.99.0 compiling the official example below (2021 edition). Your names and line numbers will differ; the first line is the part to match.
The compiler team's explanation
Attempted to pass an invalid type of variable into a variadic function.
Erroneous code example:
extern "C" {
fn printf(format: *const c_char, ...) -> c_int;
}
unsafe {
printf("%f\n\0".as_ptr() as _, 0f32);
// error: cannot pass an `f32` to variadic function, cast to `c_double`
}
Certain Rust types must be cast before passing them to a variadic function, because of arcane ABI rules dictated by the C standard. To fix the error, cast the value to the type specified by the error message (which you may need to import from std::os::raw).
In this case, c_double has the same size as f64 so we can use it directly:
unsafe {
printf("%f\n\0".as_ptr() as _, 0f64); // ok!
}From rustc --explain E0617 (1.99.0), part of the Rust project, MIT or Apache-2.0. Official page.
Related errors
Up next
Often hit nextE0308: mismatched typesA related error from the same family.Read it next →Did this answer your question?