Date: Mon, 03 Nov 2014 00:04:20 +0800 From: Julian Elischer <julian@freebsd.org> To: Rick Macklem <rmacklem@uoguelph.ca>, Ian Lepore <ian@FreeBSD.org> Cc: Freebsd hackers list <freebsd-hackers@freebsd.org> Subject: Re: how to kernel printf a int64_t? Message-ID: <54565604.2030208@freebsd.org> In-Reply-To: <1123726553.4004621.1414932491616.JavaMail.root@uoguelph.ca> References: <1123726553.4004621.1414932491616.JavaMail.root@uoguelph.ca>
next in thread | previous in thread | raw e-mail | index | archive | help
On 11/2/14, 8:48 PM, Rick Macklem wrote: > 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@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. then your code could be wrong in some cases.. PRIu64 specifies that the value will always be 64 bits (unsigned) on every architecture. If that's NOT true then yes, use a type (e.g. %d) that varies here and there. If your value will ALWAYS be 64 but then PRIu64 describes what it is much better than %j, because you need to know what %j expects on every architecture your code may ever run on. In my own opinion, PRIu64 is much more readable than %j because the size and expected signed/unsigned characterisitics are right there, where %randomletter is exactly that.. completely random, requiring that the reader go consult a man page first before reading code for any given architecture. > > 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@freebsd.org mailing list >>>>> http://lists.freebsd.org/mailman/listinfo/freebsd-hackers To >>>>> unsubscribe, send any mail to >>>>> "freebsd-hackers-unsubscribe@freebsd.org" >>>>> >>>> >>> _______________________________________________ >>> freebsd-hackers@freebsd.org mailing list >>> http://lists.freebsd.org/mailman/listinfo/freebsd-hackers >>> To unsubscribe, send any mail to >>> "freebsd-hackers-unsubscribe@freebsd.org" >>> >> >> _______________________________________________ >> freebsd-hackers@freebsd.org mailing list >> http://lists.freebsd.org/mailman/listinfo/freebsd-hackers >> To unsubscribe, send any mail to >> "freebsd-hackers-unsubscribe@freebsd.org" >> > >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?54565604.2030208>