Source-Changes-D archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: CVS commit: src/lib/libc/stdio



On Wed, Mar 28, 2012 at 11:30:50 -0400, Christos Zoulas wrote:

> On Mar 28,  5:24am, uwe%stderr.spb.ru@localhost ("Valeriy E. Ushakov") wrote:
> -- Subject: Re: CVS commit: src/lib/libc/stdio
> 
> | On Tue, Mar 27, 2012 at 22:53:47 +0000, Christos Zoulas wrote:
> | 
> | > In article <20120327202907.GT26108%bigmac.stderr.spb.ru@localhost>,
> | > Valeriy E. Ushakov <uwe%stderr.spb.ru@localhost> wrote:
> | > >
> | > >But that is not what the code was.  The code was:
> | > >
> | > >    char c; if (c == CHAR_MAX) ...
> | > >
> | > >and *that* is portable.  As I said in another mail to thsi thread that
> | > >went unanswered, it is literally schizophrenic of lint to complain
> | > >about it.
> | > 
> | > How can lint know that if (c == 255) is portable? Because CHAR_MAX
> | > gets expanded by cpp to 255 before lint parses the file.
> | 
> | And this is *precisely* why it's fundamentally wrong.  It's not 80s
> | any more.  CHAR_MAX is there for a reason.
> 
> It does not really matter. It is the compilation environment that matters,
> and for that we don't even do it right, so lint has every right to warn:

Why this bug in our headers is relevant to this discussion?


> [demoed with CHAR_MIN, because of easy access to machine with signed chars,
>  you can do the opposite test on a machine with unsigned chars]
> 
> [11:26am] 10018>cat char.c                                 
> #include <stdio.h>
> #include <limits.h>
> 
> int
> main(int argc, char *argv[])
> {
>         char c = argv[0][0];
>         if (c == CHAR_MIN)
>                 printf("yes\n");
>         return 0;
> }
> [11:26am] 10019>cc -funsigned-char -Wall char.c
> char.c: In function 'main':
> char.c:8: warning: comparison is always false due to limited range of data 
> type
> 
> In reality I would expect a program using CHAR_MIN/CHAR_MAX to work properly
> with -fsigned-char or -funsigned-char in the default compilation environment.
> Yet, it does not.

-uwe


Home | Main Index | Thread Index | Old Index