how to kernel printf a int64_t?
Rick Macklem
rmacklem at uoguelph.ca
Sun Nov 2 12:48:20 UTC 2014
Ian Lepore wrote:
> 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.
>
Yes, thanks. I'll admit to thinking exactly the same thing.
I guess I'll use %j.
Thanks everyone for your help, rick
> -- 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"
> >
>
>
> _______________________________________________
> 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