how to kernel printf a int64_t?

Ian Lepore ian at FreeBSD.org
Sun Nov 2 03:58:33 UTC 2014


On Sun, 2014-11-02 at 11:20 +0800, Julian Elischer wrote:
> On 11/2/14, 10:14 AM, Rick Macklem wrote:
> > Julian Elischer wrote:
> >> On 10/31/14, 1:09 PM, Tim Kientzle wrote:
> >>
> >>
> >> On Oct 30, 2014, at 2:01 PM, Rick Macklem <rmacklem at uoguelph.ca>
> >> wrote:
> >>
> >> Hi,
> >>
> >> I feel kinda dumb asking this, but...
> >>        int64_t i;
> >>
> >>        printf("%qd\n", (u_quad_t)i);
> >>
> >> works but looks dorky, to put it technically;-).
> >> Is there a better way to printf() a int64_t in the kernel? I often
> >> use the following to print large integers:
> >>
> >>      printf(“%jd\n”, (intmax_t)i); the "cannonical' way is to use
> >>      PRIu64 and friends, but some people seem to have a problem with
> >>      doing that.
> >>
> > Ok, so now I need to ask another dumb question.
> > How do you do this in the kernel?
> > (I can see them defines in <machine/_inttypes.h>, but including that
> >   doesn't help, which isn't surprising since PRIu64 is in a string
> >   and won't be recognized as a macro.)
> 
> you use it with string concatenation.
> like:
> 
>    printf (" this is a 64 it unsigned value:  %" PRIu64 " and I just 
> printed it\n", thingy64);
> 
> After substitution the compiler sees
>   " this is a 64 it unsigned value: %" "llu" " and I just printed it\n"
> which simplifies to:
> " this is a 64 it unsigned value: %llu and I just printed it\n"
> 
> due to concatenation. (note I didn't actually look what PRIu64 
> evaluates to)
> 
> 

Which is exactly the explanation for why "some people seem to have a
problem with doing that."  "Some people" would be "anyone who thinks it
should be possible to read code as well as write it."  This may be more
correct in some pedantic sense, but %j and a cast is more readable.

-- Ian

> >
> > Oh, and is intmax_t going to be int64_t on all arches?
> >
> > Thanks, rick
> >
> >>
> >> Tim
> >>
> >> _______________________________________________
> >> freebsd-hackers at freebsd.org mailing list
> >> http://lists.freebsd.org/mailman/listinfo/freebsd-hackers To
> >> unsubscribe, send any mail to
> >> "freebsd-hackers-unsubscribe at freebsd.org"
> >>
> >
> >
> 
> _______________________________________________
> freebsd-hackers at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
> To unsubscribe, send any mail to "freebsd-hackers-unsubscribe at freebsd.org"
> 




More information about the freebsd-hackers mailing list