warlord at MIT.EDU
Wed May 7 12:30:42 EDT 2014
Geert Janssens <janssens-geert at telenet.be> writes:
> On Friday 02 May 2014 14:55:42 John Ralls wrote:
>> > > then I get the dreaded unrecognized “l” format error,
>> > What is the dreaded unrecognized "l" format error ? I have never
>> > seen it on my WinXP test system. In which step do you get this ?
>> It’s that the ancient msvcrt.dll used by MinGW doesn’t know about %lld
>> for printing or scanning int64s. Back before Microsoft accepted the
>> c99 standard (around 2006, IIRC) their printf() required using %I64d
>> instead, and threw a "unknown conversion type character 'l' in format
>> [-Wformat]” warning. The msvcrt.dll in MinGW is that old. There are a
>> couple of workarounds, and -D__USE_MINGW_ANSI_STDIO is one of them.
> Ok. Just to clear it up completely for me: when you set that directive
> mingw does understand %lld ?
Note that %ld v %lld varies on Linux too. To print/scan a gint64 you
need %lld on 32-bit linux but %ld on 64-bit linux (because long long is
64/128 bits respectively!) This is why we try to use G_INT64_FORMAT
everywhere, because it will generally "do the right thing".
> Would that also work on Windows XP or not ? Hmm, Windows XP is 32-bit
> only so perhaps when building on WinXP you never see that directive. Is
> it a problem only for 64-bit ?
> Perhaps related: business users can define a number format for
> invoices/bills via File->Properties->Business. I remember there also
> this problem of %lld vs %I64d is rearing its ugly head. So if we build
> gnucash with the above directive perhaps this problem would go away as
> well ?
IMHO this code should arguably rewritten so that it does not get passed
directly to printf but instead we should design our own language (that
could *look* like printf if we desired) to make it platform agnostic.
Derek Atkins, SB '93 MIT EE, SM '95 MIT Media Laboratory
Member, MIT Student Information Processing Board (SIPB)
URL: http://web.mit.edu/warlord/ PP-ASEL-IA N1NWH
warlord at MIT.EDU PGP key available
More information about the gnucash-devel