by H.G.Muller » 02 Feb 2010, 18:34
Well, I think this %I64u is a MicroSoft deviation of the C standard, so that MSVC likes it should be no surprise.
Having a mismatch between a format and a variable is not a fatal error, and the format string does not even have to be known at compile time, but apparently gcc does make an attempt to examine it when it is. It seem to recognize it as a plain %u format; perhaps it thinks the I64 is some instruction for how many digits to print, or perhaps it just ignores the I because it does not understand it at all. So it complains that the format is unsigned int, while the variable is long long unsigned int.
And it is wrong in that, of course. But it does not know that the object file is going to be linked with a scanf that deviates from the standard, and which does consider %I64d a format for a 64-bit variable.
I now put a 4.4.2b installer package and binary for download here on WB forum, where I cheated to correct this error. (I.e., I changed the source to use the same format in MSVC and gcc, so strictly speaking this is not 4.4.2 anymore, although the source would be 4.4.2 when compiled with MSVC. The makefile included with 4.4.2 also does not work anymore under the Cygwin upgrade that I made; it seems to contain a stray period that so far was always ignored, but where the Cygwin make now chokes on...