Path: csiph.com!x330-a1.tempe.blueboxinc.net!usenet.pasdenom.info!news.albasani.net!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail From: Wojtek Lerch Newsgroups: comp.std.c Subject: Re: PRI* considered harmful Date: Fri, 08 Jul 2011 00:28:31 -0400 Lines: 37 Message-ID: <97nfa9FgtuU1@mid.individual.net> References: <87mxgqhk3x.fsf@once.weird.com> <8762ndhnfs.fsf@once.weird.com> <87oc15g10i.fsf@once.weird.com> <87zkkpef5z.fsf@once.weird.com> <87mxgpe84b.fsf@once.weird.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Trace: individual.net NhvQd/2JkVl9QOgZWi+nYQM36HPoI6FujflUnvMg92CTg371yV Cancel-Lock: sha1:PAvz6qwND2JUv1PubHNCFmcTiDg= User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.2.18) Gecko/20110616 Thunderbird/3.1.11 In-Reply-To: <87mxgpe84b.fsf@once.weird.com> Xref: x330-a1.tempe.blueboxinc.net comp.std.c:640 On 07/07/2011 11:58 PM, Greg A. Woods wrote: > James Kuyper writes: ... >> The right way to use PRI32d (no cast required): >> int32_t value; >> // set value >> printf("value:%" PRI32d "\n", value); > > Some code does that, but most folks don't seem to be PL/1-heads, > i.e. that pedantic about how many bits they want. Most folks want an > "int", or maybe a "long" for bigger values. They can't be bothered to > worry about numbers of bits. In code that deals with binary data exchanged between different programs (via files, network, or whatever), using uint32_t and friends in a struct is a practical way of increasing portability between compilers that have different sizes of the standard types. If you deal with data in that kind of structures, it's natural to use the same types even when you copy scalars into local variables or do math on them. (Arguably uint_fast32_t etc would be a better choice, but their names are just so darn long and ugly that everybody I know, including myself, tends to ignore them.) ... >>>>> Also, I repeat, C99 strftime() is unable to print the value of a time_t >>>>> as an integer representation of seconds since the epoch of time_t. ... >> >> Well, of course not. For that you use >> printf("seconds since epoch:%.0f\n", difftime(value,epoch)); > > Decades of unix tradition flushed down the drain by C99. :-) There's a lot of traditional Unix functionality that C99 chooses not to support (such as directories, processes, file permissions, etc). All that stuff, along with integer time_t that linearly counts seconds, exists in POSIX -- and C99 doesn't forbid you to rely on POSIX if you don't mind losing some portability.