delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/2000/04/10/20:19:04

Message-ID: <002301bfa351$9c3bb3a0$2d9709ca@saraswati>
From: "Bharat Mallapur" <bharatmallapur AT eth DOT net>
To: <djgpp AT delorie DOT com>
Subject: Ansi/iso C compliance whatever it may eventually mean
Date: Tue, 11 Apr 2000 06:31:50 +0530
MIME-Version: 1.0
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 5.00.2014.211
X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2014.211
Reply-To: djgpp AT delorie DOT com

I got the following response e-mail from gnu-bugs AT gcc DOT gnu DOT org

in short i want to know that how is it that gcc which is supposed to be
"totally" ansi/iso compliant not have getchar which is a standard library
function.The use of getchar in K&R 2 and in many ansi compliant programs
seems to be enough to call it ansi-compliant.
The fact is i decided to download djgpp only after being told on comp.lang.c
that it is a fully ansi/iso compliant compiler and of course that it is
free.
 So now please tell me whether djgpp is ansi/iso C compliant or not.

e-mail me at :
guruduttmallapur AT usa DOT net or bharatmallapur AT eth DOT net

The following is what transpired :
> From: "Bharat Mallapur" <bharatmallapur AT eth DOT net>
> To: <gcc-bugs AT gcc DOT gnu DOT org>
> Cc: <bug-gcc AT gnu DOT org>

>Please only send in bugs to one address, not two.

> Date: Mon, 10 Apr 2000 21:11:18 +0530
> Bug report for gcc

>This is not a bug in gcc.  gcc doesn't provide getchar.  You can try
>submitting a bug report to djgpp.  Also, you may want a book on UNIX
>programming.  There is a lot of detail here that I think influences
>this, but that you may not know about.  See raw tty mode v nonraw tty
>mode and the precise semantics of the EOF character, and what it >means
>and where it means it.

>The C FAQ might cover some of the details, see comp.lang.c.

>>Bug report for gcc version 2.95.2 19991024 (release)
>>contact me by e-mail at : guruduttmallapur AT usa DOT net

>>I am running MS-DOS (Windows 98 04-10-1998 release)
>>Celeron 366 MHz.
>>RAM 64 MB

>>The gcc that i am using was recently downloaded as part of the >>djgpp set
of
>>zip files.

>>My problem is the following:
>>============================
>>/*
>> Problem : Non leading EOF is ignored by getchar().
>> Triggering :
>>             Try TYPING IN the 3 following lines when running the
program:
>>             "a ^Z the" enter/return
>>             " ^Z the"  enter/return
>>             "^Z the"   enter/return
>>             (here ^Z gives EOF and is same as Ctrl+Z)

>> My apologies if this is a wild goose chase.
>> And thanks for making gcc free.Its very essential/useful for students
>> like me.
>>*/

>>#include <stdio.h>

>>int main(void)
>>{
>> int ch=0;

>> while (1) {
>>    if ( (ch=getchar()) == EOF ) {
>>        printf("EOF in input value=%d and ch=%c", ch,ch);
>>        break;
>>    }
>>    else {
>>        printf("%c",ch);
>>    }
>> }
>> return 0;
>>}
>>/*
>> Read on :

>> The problem seems to be with getchar() dealing with EOF in >>'interactive
>>mode'
>> It works well when piping input from a text file and that too because
>>the
>>EOF
>> has already been correctly dealt with by the editor used to create the
>>file.

>> On typing the 3 following lines when running the program:
>> "a ^Z the" enter/return
>> " ^Z the"  enter/return
>> "^Z the"   enter/return

>> 1) a leading EOF causes getchar() to behave properly
>> 2) a non leading EOF causes getchar() to
>>    a) stop inputting characters
>>    b) ignore the EOF as seen by the non-triggering of the if-else

>> You may say its not a big deal but then if I were to write the above
>> program it would loop infinitely unless I entered a leading EOF.
>> Also this very same program drew my attention to the problem.

>> The fact is, it is based on an exercise program in
>> Kernighan and Ritchie second edition C prog. lang.

>> There is no problem in this program as getchar is not called again
>> and again as in a loop to input a string.

>> #include <stdio.h>

>> int main(void)
>> {
>>  int ch=0;

>>  if ( (ch=getchar()) == EOF ) {
>>     printf("EOF in input value=%d and ch=%c", ch,ch);
>>  }
>>  else {
>>      printf("%c",ch);
>>  }
>>  return 0;
>> }

>>*/




- Raw text -


  webmaster     delorie software   privacy  
  Copyright 2019   by DJ Delorie     Updated Jul 2019