On 2 June 2011 20:19, Marc Balmer
<marc@msys.ch> wrote:
Am 02.06.2011 20:47, schrieb Marc Balmer:
Am 02.06.2011 19:44, schrieb liam mail:
On 2 June 2011 18:09, Tony Finch <dot@dotat.at <mailto:dot@dotat.at>>
wrote:
Marc Balmer <marc@msys.ch <mailto:marc@msys.ch>> wrote:
>
> What does the standard say is*() should return if the argument is
EOF?
> Is that specified at all?
It seems to be unspecified. This is probably a bug in the standard.
Here's a link to C99 with all the technical corrigenda included. The
relevant part is section 7.4 starting on page 181.
http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1256.pdf
Tony.
--
f.anthony.n.finch <dot@dotat.at <mailto:dot@dotat.at>> http://dotat.at/
Rockall, Malin, Hebrides: South 5 to 7, occasionally gale 8 at first in
Rockall and Malin, veering west or northwest 4 or 5, then backing
southwest 5
or 6 later. Rough or very rough. Occasional rain. Moderate or good,
occasionally poor.
Although the C99 standard does not state it, the C99 rationale v5.1[1]
does
"*7.4.1Character classification functions *
**The definitions of /printing character /and /control character /have
been generalized from ASCII.
Note that none of these functions returns a nonzero value (true) for the
argument value *EOF*."
So if Microsoft claims to be in support of the C99 standard, this is
clearly a bug in their implementation of the SDK.
IIRC Microsoft do not claim to support C99 on any platform.
for general amusement, this is how to make a microsoft compiler halfway standards compliant:
#undef isalnum
#define isalnum(_c) ( _c == EOF ? 0 : _isctype(_c,_ALPHA|_DIGIT) )
#undef isdigit
#define isdigit(_c) ( _c == EOF ? 0 : _isctype(_c,_DIGIT) )
I wonder if -1 is being truncated to 0xFF and your locale allows 0xFF to be passed to is* function as it is part of the special character set. EOZ is defined in lzio.h and used in lzio.c and llex.c. what happens when you change these to use EOF from stdio.h instead of -1 ?