From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.2 required=5.0 tests=BAYES_00,INVALID_MSGID, PLING_QUERY autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 1014db,4873305131bf4d94 X-Google-Attributes: gid1014db,public X-Google-Thread: 103376,4873305131bf4d94 X-Google-Attributes: gid103376,public X-Google-Thread: fdb77,4873305131bf4d94 X-Google-Attributes: gidfdb77,public X-Google-Thread: 109fba,4873305131bf4d94 X-Google-Attributes: gid109fba,public From: kaz@helios.crest.nt.com (Kaz Kylheku) Subject: Re: How big is an int? (was: Yet another stupid language war (was: ... the only languages you need!!)) Date: 1997/11/06 Message-ID: <63t1j9$md8$1@helios.crest.nt.com>#1/1 X-Deja-AN: 287464450 References: <34557f2b.1934172@news.mindspring.com> <63qkp9$bqr$3@darla.visi.com> <63r2sv$rgm$1@helios.crest.nt.com> <878820761snz@genesis.demon.co.uk> Organization: A poorly-installed InterNetNews site Newsgroups: comp.lang.ada,comp.lang.c,comp.lang.c++,comp.lang.java.advocacy,comp.lang.c,comp.lang.c++ Date: 1997-11-06T00:00:00+00:00 List-Id: In article <878820761snz@genesis.demon.co.uk>, Lawrence Kirby wrote: >In article <63r2sv$rgm$1@helios.crest.nt.com> > kaz@helios.crest.nt.com "Kaz Kylheku" writes: >>But it cannot be a conforming hosted implementation, as I pointed out >>in the other article, because the getc() and putc() functions require >>the int type to represent everything in the range of 0 to UCHAR_MAX, >>plus the extra value EOF. > >getc() and putc() return EOF if the operation fails. However I can find >no guarantee that EOF is distinct from a valid character value returned But EOF indicates end of input or an error condition. If you see EOF without such a condition, what does that mean? >by one of these functions, so I disagree that int has to be greater than >char (specifically that INT_MAX >= UCHAR_MAX). However things are >unpleasant if that isn't the case. I forgot that you can check feof() and ferror(), which will resolve the ambiguity if EOF clashes. unsigned char byte; switch (ch = getc(stream)) { /*...*/ case EOF: if (feof(stream) || ferror(stream)) { /* handle */ } else { byte = EOF; } /*...*/ } However, I doubt that very many programs actually do this. Is a strictly conforming program required to deal with the possibility that EOF might not actually be an indicator of neither an error, nor the end of input? Could Schildt be right after all? ;) -- "In My Egotistical Opinion, most people's C programs should be indented six feet downward and covered with dirt." -- Blair P. Houghton