This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

calling exit in response to an error shouldn't be an error...


If I have a function returning NULL on error (including EOF).

So the program calls exit if the function doesn't return
a non-zero value (func() || exit(1)).

I have:

--/tmp/ex.c--

main() { char * buf[512];
    while (gets(buf) || exit(0)) puts(buf);
}

-- compile w/:
gcc -fpermissive --no-warnings  -o /tmp/ex /tmp/ex.c

Got:
/tmp/ex.c: In function ‘main’:
/tmp/ex.c:2:22: error: void value not ignored as it ought to be
  while (gets(buf) || exit(0) ) puts(buf);
                      ^~~~~~~

I understand that the while is testing the value of exit
"when it returns", but since it doesn't, why flag an error
(if exit is part of C-standard?) but *especially*, why
not a warning, like a type mismatch or such?


But this:

--/tmp/ex2.c--

main(){ char * buf[512];
  while (1) {
    fgets(buf) || exit(1);
    fputs(buf);
  }
}

---compile + output:
> gcc -fpermissive --no-warnings  -o /tmp/ex2 /tmp/ex2.c
/tmp/ex2.c: In function ‘main’:
/tmp/ex2.c:4:18: error: void value not ignored as it ought to be
    fgets(buf) || exit(1);
                  ^~~~~~~

Ultra confusing -- how is exit value used?  Isn't it thrown away?





Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]