On Dec 19, 2005, Daniel Jacobowitz wrote: >> > From: Alexandre Oliva >> > Date: Mon, 19 Dec 2005 17:20:48 -0200 >> > - num = sscanf (p, "%g%s", (float *) &putithere->typed_val_float.dval,s); >> > + num = sscanf (p, "%g%s", (float *) (void *) &putithere->typed_val_float.dval,s); > We should fix it properly, in any case. The right solution here is > pretty apparent: delete the "float" case, and #define appropriate > format characters for DOUBLEST in doublest.h, in the same place we > typedef DOUBLEST. Just like GCC's HOST_WIDE_INT_PRINT. We can't quite do that because we may have to issue more complex command patterns than simply a plain sscanf into the output location. I've come up with this macro that defers to a static inline function in the complex case. Is this change acceptable? Tested on amd64-linux-gnu. Another alternative that I found uglier would be to define a DOUBLEST_SCAN macro and a DOUBLEST_SCAN_TYPE typedef, and always declare a variable of DOUBLEST_SCAN_TYPE, scan into it, and then copy the scanned value to the given output variable. This enables people to construct more complex scan patterns, but is it worth the ugliness and extra copying for the sake of the uncommon `has long double but can't scanf it' case?