On 01-01-11 00:49, Gernot Hassenpflug wrote: > I had a report that %lu might be better than %llu for the debug > statements, so I would like to confirm that %llu was not a typing > error? Should I use %llu or %lu for the debug statements when uint64_t > is the declared type?
Hi Gernot, on a 32-bit platform, uint64_t is a "long long unsigned int" and therefore, %llu should be used in printf. On a 64-bit platform, however, uint64_t is (usually) a "long unsigned int", requiring %lu as format specifier. These fixed-size types are part of the C99 standard, and to solve the ambiguity problem, they have also introduced some portable printf format macros in inttypes.h. The one that you need here is PRIu64, i.e. something like PDBG(pixma_dbg(4, "*calc_raw_width***** width %lu extended by %lu and rounded to %u *****\n", param->w, param->xs, raw_width)); should be written as PDBG(pixma_dbg(4, "*calc_raw_width***** width "PRIu64" extended by "PRIu64" and rounded to %u *****\n", param->w, param->xs, raw_width)); in order to be fully portable (provided that the compiler supports C99). You'll also have to include <inttypes.h>, obviously (e.g. in pixma.h): #ifdef HAVE_INTTYPES_H # include <inttypes.h> /* available in ISO C99 */ #endif /* HAVE_INTTYPES_H */ Best regards, Eddy
